RestSharp似乎没有序列化/设计具有DateTime字段的类

本文关键字:DateTime 字段 序列化 RestSharp | 更新日期: 2023-09-27 18:18:15

我有一个模型,我在我的web-api层和我的restsharp基于客户端使用。

它的日期时间字段如下:

public class User 
{
   public int Id {get;set;}
   public string Name {get;set;}
   public DateTime Created {get;set;}
   public DateTime Updated {get;set;}
}

当我调试我的代码时,我可以看到下面发生的事情:

  1. 我正确地创建并初始化我的类,我可以看到VS显示的DateTime值:

    14/08/2014(日、月、年)

  2. 当我的restsharp客户端向我的web-api层发出请求时,我在我的web-api控制器中设置了一个断点,我可以看到datetime字段都是空的。

    01/01/0001 12:00:00 AM

  3. 我的Save操作失败,因为datetime值不在sql server的可接受范围内。

由于DateTime是内置类型,因此应该可以正常工作。我做错了什么?

如果我在保存到DateTime.Now之前重置datetime字段,它会正确保存。

更新

我的Restsharp客户端代码有以下方法:

 public Token SaveUser(User user)
        {
            var request = new RestRequest();
            request.Resource = "Users/SaveUser";
            request.Method = Method.POST;
            request.AddObject(user);
            return Execute<User>(request);
        }

当我在SaveUser中设置断点时,我可以看到datetime值是正确的。

我的web-api控制器中的断点显示了带有空datetime值的用户对象。

    [HttpPost]
    [Route("SaveUser")]
    public SaveUserResponse SaveUser(User user)
    {
    ....
    }

提琴手

使用fiddler我的请求(使用AddObject)看起来像这样:

POST http://localhost:60525/api/Users/SaveUser HTTP/1.1
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml
User-Agent: RestSharp/104.4.0.0
Content-Type: application/x-www-form-urlencoded
Host: localhost:60528
Content-Length: 292
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Id=0&Name=abc&Created=15%2F08%2F2014%2011%3A58%3A14%20AM&Updated=15%2F08%2F2014%2011%3A58%3A14%20AM

web api端返回null的日期有什么原因吗?

RestSharp似乎没有序列化/设计具有DateTime字段的类

考虑使用request.AddBody代替request.AddObject

  • AddObject将对象的每个属性作为单独的参数添加。正文的编码类似于HTML <Form>提交的工作方式。

  • AddBody将对象的内容序列化到请求体。

您可能还想使用request.RequestFormat = DataFormat.Json;来明确发送的格式。

你可能还需要[FromBody]属性在你的WebAPI控制器:

public SaveUserResponse SaveUser([FromBody] User user)

顺便说一句,将你的控制器路由命名为"Users"而不是"SaveUser"会更"RESTful"。通过POSTUsers控制器,这应该表示保存。