7

好吧,我不明白为什么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"

但是当我在 JsonNetResult 中使用 JsonSerializer.Serialize 时:http: //james.newtonking.com/archive/2008/10/16/asp-net-mvc-and-json-net.aspx

我得到以下输出:

"DeliveryDate": new Date(1362520794703)

我无法弄清楚为什么会出现这种不一致。我原以为JsonConvert.SerializeObject会在JsonSerializer内部使用。

4

1 回答 1

10

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

所以很久以前我在 MVC4 中序列化DateTime对象时遇到了麻烦。JsonResult基本上我的DateTime对象被序列化为"\/Date(1239018869048)\/"我想我读到了作者对 JSON.NET 的回答,关于 SO 建议添加 [JsonConverter(typeof(JavaScriptDateTimeConverter))]DateTime模型类的属性并@Html.Raw(JsonConvert.SerializeObject(Model)在视图中使用。果然我做到了,这解决了我当时的短期问题

时间过去了,今天我需要支持在用户向服务器发布一些内容后即时更新 javascript viewModel。这引起了我今天的错误。事实证明,我的所有DateTime属性都用该属性装饰,当我尝试将它们序列化回客户端时,序列化程序的行为与预期的一样。这让我相信JsonConvert.SerializeObject实际上是尊重属性。

在我删除了有问题的属性后,一切都开始运转良好。调整周围的东西,我发现我可以使用默认值DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind,我可以忘记Z我的日期时间字符串。

于 2013-03-05T23:07:51.467 回答