问题在C#中反序列化JSON日期 - 增加2小时

vin*_*ana 5 c# json javascriptserializer

在将JSON日期反序列化为C#DateTime时,我们遇到了这样一个令人讨厌的问题.

代码是:

JavaScriptSerializer serializer = new JavaScriptSerializer();
jsonTrechos = jsonTrechos.Replace("/Date(", "\\/Date(").Replace(")/", ")\\/");
Trecho[] model = serializer.Deserialize<Trecho[]>(jsonTrechos);
Run Code Online (Sandbox Code Playgroud)

jsonTrechos是一串json2.js JSON.stringify();.

问题是:反序列化工作,在Trechos对象的所有日期加上2小时.

我的时区是巴西(UTC -3),如果它有任何关系,我们正在夏令时(所以我们目前在UTC -2).我想也许本地化和时区可能会在这方面发挥作用,如果真的如此,我不知道如何解决它.

Raz*_*zie 12

这在MSDN中有记录:

日期对象,以JSON表示为"/日期(刻度数)/".刻度数是一个正或负的长值,表示自UTC时间1970年1月1日午夜以来经过的刻度数(毫秒).

尝试打电话DateTime.ToLocalTime(),看看你是否得到了正确的日期.


cas*_*One 7

强烈建议使用Json.NET库.坦率地说,.NET框架中的JSON序列化程序(以及多个序列化程序)在某些方面都很古怪,特别是在序列化日期时.

Json.NET是我见过的唯一一个能够持续处理它们(以及一般的JSON)并且对其他消费者没有问题的库.