3

是否可以设置 JSON.Net,以便如果要序列化 ​​DateTime,则将其序列化为 UTC 格式。从字符串反序列化时,将其反序列化为“LocalTime”。例如:

  • 序列化
    • 2012 年 1 月 1 日 16:00:00(种类 = UTC) 存储为2012-01-01T16:00:00Z
    • 2012 年 1 月 1 日 16:00:00(种类 = 本地,GMT +1)-> 存储为2012-01-01T15:00:00Z
  • 反序列化(假设机器的本地时间 = GMT+1)
    • 2012-01-01T16:00:00Z-> 反序列化为 01/01/2012 17:00 +1GMT(种类 = 本地)
    • 2012-01-01T15:00:00Z-> 反序列化为 01/01/2012 16:00 +1GMT(种类 = 本地)

但是,我希望这“自动”发生,而不必每次都用设置来指定它 - 就像全局设置一样。这可能吗?

4

2 回答 2

6

在 ASP.NET WebAPI 中,这是可能的。尝试这个:

// Converters will be userd during serialization (override DateTimeZoneHandling)
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AdjustToUniversal });
// DateTimeZoneHandling will be effective during deserialization
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
于 2013-07-24T10:20:59.470 回答
1

就像将来参考的注释一样,对此的“修复”不是使用DateTimebut DateTimeOffset,因为DateTime可能会对其实际所在的时区带来各种混淆。

存储 a 没有歧义,DateTimeOffset因为它始终包括时区,并且无论何时何地都始终指代同一时间点。

于 2013-07-25T08:12:37.197 回答