C# RestSharp不';我的类有DateTime字段,但我似乎没有序列化/desh

C# RestSharp不';我的类有DateTime字段,但我似乎没有序列化/desh,c#,datetime,asp.net-web-api,restsharp,C#,Datetime,Asp.net Web Api,Restsharp,我在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显

我在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显示的日期时间值:

    2014年8月14日(日、月、年)

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

    01/01/0001 12:00:00 AM

  • 我的保存操作失败,因为日期时间值不在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);
            }
    
    小提琴手

    使用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端日期返回空值的原因是什么?

    考虑使用
    request.AddBody
    而不是
    request.AddObject

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

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

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

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

    public SaveUserResponse SaveUser([FromBody] User user)
    

    顺便说一句,将控制器路由命名为“Users”而不是“SaveUser”会更“RESTful”。通过
    POST
    ing发送给
    Users
    控制器,这应该表示保存。

    您确定问题出在客户端吗?尝试使用Fiddler捕获服务器输出,或从浏览器调用API。验证数据确实是从API发送的。如果是,请发布更多关于如何从客户端调用api的代码。@MattJohnson与此同时,我已经发布了我的客户端和web api代码的外观。如果您使用
    AddBody
    而不是
    AddObject
    ,是否有效?@MattJohnson当我使用AddBody时,在web api控制器级别,用户对象为空。请参阅下面的答案。不过,您应该检查以确保请求按预期生成。我添加了[FromBody],并且用户对象仍然为空。您是否在Fiddler中验证了请求?我仍然需要获得Fiddler,IT部门运作紧张,我需要批准!奇怪的是,当调用我的SaveUser(Execute方法)时,我在fiddler中看不到任何显示对localhost:60525(我的web api端点)的请求的内容,但我在调试器中跳转到端点,因此它被调用。为什么fiddler没有接收对web api的restsharp客户端调用?
    public SaveUserResponse SaveUser([FromBody] User user)