好吧我无法弄清楚为什么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
。
答案 0 :(得分:6)
好吧我已经弄明白了,我希望分享以防任何人遇到这种情况。
很久以前,我无法在MVC4中序列化DateTime
对象JsonResult
。基本上我的DateTime
个对象被序列化为"\/Date(1239018869048)\/"
我想我已经阅读了作者对JSON.NET的回答,建议将[JsonConverter(typeof(JavaScriptDateTimeConverter))]
添加到DateTime
属性中。模型类并在视图中使用@Html.Raw(JsonConvert.SerializeObject(Model)
。所以我确实做到了这一点,这解决了我当时 的短期问题
时间流逝,今天我需要支持在用户将一些内容发布到服务器后即时更新javascript viewModel。这导致我今天的错误。事实证明,我的所有DateTime
属性都使用属性进行了修饰,当我尝试将它们序列化回客户端时,序列化程序WAS的行为与预期的一样。这让我相信JsonConvert.SerializeObject
实际上不尊重属性。
我删除了违规的属性后,一切都开始变得非常棒了。调整周围的事情我发现我可以使用默认的DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
,我可以忘记我的日期时间字符串中的Z
。