JsonConvert.SerializeObject vs JsonSerializer.Serialize



好吧,我不明白为什么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在我的日期时间字符串。

相关内容

  • 没有找到相关文章

最新更新