好吧,我不明白为什么JsonConvert.SerializeObject
序列化DateTime
对象不同于JsonSerializer.Serialize。
给定类
public class Test
{
[JsonConverter(typeof(JavaScriptDateTimeConverter))]
public DateTime DeliveryDate { get { return DateTime.Now; } }
}
@Html.Raw(JsonConvert.SerializeObject(new Test()))
输出:
"DeliveryDate": "2013-03-01T07:00:00.000Z"
但是当我使用JsonSerializer。像在JsonNetResult中那样序列化:http://james.newtonking.com/archive/2008/10/16/asp-net-mvc-and-json-net.aspx
得到以下输出:
"DeliveryDate": new Date(1362520794703)
我不明白为什么会有这种不一致。我本以为JsonConvert.SerializeObject
会在内部使用JsonSerializer
。 好了,我已经弄明白了,我想分享一下,以防有人遇到这种情况。
很久以前,我在序列化DateTime
对象和MVC4中的JsonResult
时遇到了麻烦。基本上我的DateTime
对象被序列化到"/Date(1239018869048)/"
,我想我从作者那里读到了JSON的答案。NET on SO建议将[JsonConverter(typeof(JavaScriptDateTimeConverter))]
添加到模型类的DateTime
属性中,并在视图中使用@Html.Raw(JsonConvert.SerializeObject(Model)
。所以我确实这么做了,这就解决了我的短期问题
时间过去了,今天我需要支持在用户发布一些东西到服务器后更新javascript viewModel。这就引出了我今天的错误。事实证明,我所有的DateTime
属性都是用属性装饰的,当我试图将它们序列化回客户端时,序列化器的行为就像预期的那样。这让我相信JsonConvert.SerializeObject
实际上是而不是尊重属性。
在我删除了这些令人不快的属性之后,一切都开始变得非常好。调整周围的东西,我发现我可以使用默认的DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
,我可以忘记Z
在我的日期时间字符串。