【问题标题】:Web API can't deserialize a Javascript Date.toISOString()?Web API 无法反序列化 Javascript Date.toISOString()?
【发布时间】:2014-05-23 14:03:39
【问题描述】:

我正在寻找一种无需在客户端安装另一个库的情况下将 javascript 日期传递给 .NET Web api 控制器的方法...

我希望将 javascript 日期反序列化为 .NET DateTime。

var date = new Date(); 
post({currentDate: date.toISOString()}); 

作为 DateTime.Min 到达服务器(表明它无法反序列化)。

这是通过网络发送内容的示例,但 ApiController 无法创建具有正确日期的 DateTime...

请求:

{"Date":"2014-04-16T17:03:03.383Z"}

C#:

    [Serializable]
    public class MyObj 
    {
         public DateTime Date { get; set; }
    }

    public class MyController : ApiController
    {
        public HttpResponseMessage Post(MyObj dd)
        {
            // dd's Date property equals DateTime.Min rather than the correct date...
            return null;
        }

    }
}

【问题讨论】:

  • 你确定它被正确传递了吗? Javascript 的 Date.toISOString() 应该返回一个格式为“2014-04-10T03:56:12.238Z”的字符串,这是 C# DateTime.Parse 应该能够处理的格式。
  • 您在寻找 ISO 时间戳吗?
  • 我确信时间戳将通过:2014-04-16T17:03:03.383Z 但没有正确解析为 DateTime 使用 ApiController 的方法接受带有 DateTime 的对象。

标签: c# javascript json datetime deserialization


【解决方案1】:

移除 [Serializable] 属性。

【讨论】:

    【解决方案2】:

    我认为您应该从客户端推送报价。然后服务器端将从滴答声中获取日期。 示例:

    Javascipt:

    var date = new Date(); 
    post({ticks: date.getTime()}); 
    

    .NET:

    DateTime date = new DateTime(ticks);
    

    【讨论】:

    • 我必须创建一个 DTO 并为我的对象图中的所有日期使用整数,并编写特殊代码将所有刻度解压到 DateTimes 中。 Web API 真的这么烂吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多