为Json.Net指定DateTime序列化/反序列化的全局设置

时间:2013-03-22 12:46:59

标签: json.net

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

  • 序列化
    • 01/01/2012 16:00:00(Kind = UTC)存储为2012-01-01T16:00:00Z
    • 01/01/2012 16:00:00(Kind = Local,GMT +1) - >存储为2012-01-01T15:00:00Z
  • 反序列化(假设机器具有本地时间= GMT + 1)
    • 2012-01-01T16:00:00Z - >反序列化至01/01/2012 17:00 + 1GMT(Kind = Local)
    • 2012-01-01T15:00:00Z - >反序列化至01/01/2012 16:00 + 1GMT(Kind = Local)

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

2 个答案:

答案 0 :(得分:5)

在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;

答案 1 :(得分:1)

作为未来参考的注释,对此的“修复”不是使用DateTime而是使用DateTimeOffset,因为DateTime可能会对时区产生各种混淆英寸

存储DateTimeOffset并不存在歧义,因为它总是包含时区,并且无论何时何地,总是指相同的时间点。