JsonConvert.SerializeObject与JsonSerializer.Serialize

Mr.*_*ung 5 .net json.net

好吧,我不知道为什么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内部使用。

Mr.*_*ung 6

好了,我已经弄清楚了,我想分享一下,以防有人遇到这种情况。

所以很久以前,我在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日期时间字符串中的。