好吧,我不知道为什么JsonConvert.SerializeObject序列化DateTime对象的方式与JsonSerializer.Serialize不同。
给定班级
public class Test
{
[JsonConverter(typeof(JavaScriptDateTimeConverter))]
public DateTime DeliveryDate { get { return DateTime.Now; } }
}
Run Code Online (Sandbox Code Playgroud)
@Html.Raw(JsonConvert.SerializeObject(new Test()))
输出:
"DeliveryDate": "2013-03-01T07:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
但是当我在JsonNetResult中使用JsonSerializer.Serialize时:http ://james.newtonking.com/archive/2008/10/16/asp-net-mvc-and-json-net.aspx
我得到以下输出:
"DeliveryDate": new Date(1362520794703)
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会有这种不一致。我本以为JsonConvert.SerializeObject会在JsonSerializer内部使用。
好了,我已经弄清楚了,我想分享一下,以防有人遇到这种情况。
所以很久以前,我在MVC4中序列化DateTime对象时遇到了麻烦JsonResult。基本上,我的DateTime对象已被序列化为"\/Date(1239018869048)\/"我认为我从JSON上获得了作者的回答,建议添加 [JsonConverter(typeof(JavaScriptDateTimeConverter))]到DateTime模型类的属性中并@Html.Raw(JsonConvert.SerializeObject(Model)在View中使用。如此肯定,我做到了,并解决了当时的短期问题
时光流逝,今天,在用户向服务器发布内容后,我需要支持即时更新javascript viewModel。今天提出了我的错误。事实证明,我所有的DateTime属性都装饰有该属性,当我尝试将其序列化回客户端时,序列化程序的行为与预期的一样。这使我相信JsonConvert.SerializeObject实际上并不尊重属性。
在删除了令人反感的属性之后,一切都开始运转起来很棒。我发现我可以只使用默认值DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind,而忘了Z日期时间字符串中的。
| 归档时间: |
|
| 查看次数: |
4681 次 |
| 最近记录: |