WCF REST JSON API:DataContractJsonSerializer中的DateTime序列化

时间:2011-04-19 14:03:58

标签: c# .net datetime timezone

有谁知道为什么DataContractJsonSerializer将DateTime属性序列化以包含时区?即,我在一个被序列化为JSON的对象上有一个.NET DateTime。它的序列化为1303500600000 + 0000而不是1303500600000。

这意味着当客户端应用程序内的DataContractJsonSerializer对其进行反序列化时,它将被转换为“本地”时间。实际上,日期时间应该与时区无关。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。正在开发本地PST的所有内容并推送到服务器EST,这显然会引起一些有趣的问题。我从来没有找到一个很好的解释为什么会这样,但它与DateTime.Kind有关。默认情况下,DateTime上的DateTimeKind是未指定的,Serializer将其转换为“Local”,从而添加时区偏移量。

我最终解决这个问题的方法是将DateTime.Kind设置为UTC:

http://msdn.microsoft.com/en-us/library/shx7s921.aspx

以下是该问题的另一个论坛答案:

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/0a6c84a3-5348-4ea0-b33f-eb411a2e1c97

如果DateTime.Kind是Utc,序列化程序将排除TimeZone偏移量,您可以自己跟踪所有这些并在服务器和客户端上做出关于日期TimeZone的所需假设。

答案 1 :(得分:0)

试试这个

yourDate.ToUniversalTime()

来源:here