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;}
}
当我调试我的代码时,我可以看到下面发生的事情:
我正确地创建并初始化我的类,我可以看到VS显示的DateTime值:
14/08/2014(日、月、年)
当我的restsharp客户端向我的web-api层发出请求时,我在我的web-api控制器中设置了一个断点,我可以看到datetime字段都是空的。
01/01/0001 12:00:00 AM
我的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的日期有什么原因吗?
考虑使用request.AddBody
代替request.AddObject
。
-
AddObject
将对象的每个属性作为单独的参数添加。正文的编码类似于HTML<Form>
提交的工作方式。 -
AddBody
将对象的内容序列化到请求体。
您可能还想使用request.RequestFormat = DataFormat.Json;
来明确发送的格式。
你可能还需要[FromBody]
属性在你的WebAPI控制器:
public SaveUserResponse SaveUser([FromBody] User user)
顺便说一句,将你的控制器路由命名为"Users"而不是"SaveUser"会更"RESTful"。通过POST
到Users
控制器,这应该表示保存。