2013-03-22 93 views
1

是否可以设置JSON.Net,以便如果要序列化DateTime,它将被序列化为UTC格式。当从一个字符串反序列化时,它被反序列化为'LocalTime'。例如:为Json.Net指定DateTime序列化/反序列化的全局设置

  • 序列化
    • 01/01/2012 16点00分00秒(=种类UTC)存储为2012-01-01T16:00:00Z
    • 01/01/2012 16: 00:00(Kind = Local,with 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(类=本地)

不过,我想这样的事情发生“自动”,而不必与指定它每次都在进行设置 - 就像全球设置一样。这可能吗?

回答

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

正如以备将来参考说明,“修复”这是不使用DateTimeDateTimeOffset,为DateTime可以带来关于向时区,它实际上是在各种混乱

存储DateTimeOffset时没有任何歧义,因为它始终包含时区,并始终引用相同的时间点,无论何时何地。