【发布时间】:2016-03-29 14:28:53
【问题描述】:
如果您使用嵌入式 .net JavaScriptSerializer 对 DateTime 进行序列化和反序列化,如果您使用的是 UTC+something,则会得到两个不同的日期!
示例(假设您像我现在一样在 UTC+2)
JavaScriptSerializer myJson = new JavaScriptSerializer();
DateTime myDate = DateTime.Now; //suppose 2016-03-29 16:12:00
strSerialized = myJson.Serialize(myDate);
//DO WHAT YOU NEED WITH IT...
DateTime myDateDes = myJson.Deserialize<DateTime>(strSerialized);
Label1.Text=myDateDes.ToString();//it gives you 2016-03-29 14:12:00 ! WRONG! IT's in UTC+0 ! Has 2 HOURS less !!!
所以,当你得到反序列化的日期时,它会默认为你提供 UTC+0 值...!!
这与JavaScriptSerializer UTC DateTime issues 不同,因为那篇文章描述了不同日期时间数据类型的反序列化差异,并提供了无法解决问题的解决方案 (.UtcDateTime)。事实上,尝试用 .utcDateTime 反序列化一个序列化的 DateTime 总是会给你错误的 UTC+0 日期...
【问题讨论】:
-
我猜你想序列化/反序列化一个 DateTimeOffset 对象。
-
在我的情况下,我需要 DateTime ... DateTimeOffset 为我提供了 utc 偏移量,例如 29/03/2016 17:00:23 +02:00 但它总是在之后转换为 utc+0反序列化 (29/03/2016 15:00:23 +00:00)。这对于了解背后发生的事情很有用,但在我的情况下,我只需要...反序列化我序列化的内容,而不是更改后的 utc 版本...
-
我相信这实际上是 .net 序列化程序中的一个已知错误。
-
您的期望中存在错误,不一定在实现中。 JSON 字符串
"2016-03-29 16:12:00"(或它序列化的任何内容,您没有显示)应该是什么意思,为什么?该字符串中没有时区信息,因此序列化程序必须做出 some 假设。这个假设与您所做的假设不同,但这并不意味着它是一个错误。
标签: c# asp.net datetime serialization javascriptserializer