2013-03-22 92 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時沒有任何歧義,因爲它始終包含時區,並始終引用相同的時間點,無論何時何地。