2013-03-22 5 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 (Вид = местный, с GMT +1) -> Сохранено как 2012-01-01T15:00:00Z
  • Deserialization (Предполагается, что машина с Местное время = 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)

Однако, я хотел бы, чтобы это произошло 'автоматически', и не имея, чтобы указать его настраивается каждый раз - как глобальная настройка. Это возможно?

ответ

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

Так же, как примечание для будущей справки, «исправление» на это было не использовать DateTime но DateTimeOffset как DateTime может принести различные путаницы в отношении к часовому поясу это на самом деле в

.

Нет никакой двусмысленности в хранении DateTimeOffset, поскольку он всегда хранится в часовом поясе и всегда относится к одной и той же точке времени независимо от того, где и когда.

Смежные вопросы