Запрет Json.NET 4.5 добавлять смещение часового пояса при использовании MicrosoftDateFormat

За исключением пользовательской реализации DateTimeConverterBase, существует ли способ сохранить Json.NET 4.5+, когда установлено использование DateFormatHandling.MicrosoftDateFormat, из добавления смещения часового пояса для любого не-UTC DateTimeдано?

"\/Date(1333645844276-0600)\/"

Подробности

Я переключаю проект API с использования встроенного .NET JavaScriptSerializerдля использования Json.NET для генерации JSON. В Json.NET для UTC DateTimeсериализация даты и времени по умолчанию была аналогична версии .NET:

"\/Date(1333645844276)\/"

Для не-UTC, в отличие от JavaScriptSerializer, Json.NET добавляет смещение часового пояса к результатам (-6 для моей области, это время года):

"\/Date(1333645844276-0600)\/"

Вот код, который я использую для переключения Json.NET 4.5+ обратно на \/Date(...)\ Формат /(называемый MicrosoftDateFormat):

JsonSerializerSettings customJsonSettings = new JsonSerializerSettings() {
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
};
string result = JsonConvert.SerializeObject(DateTime.Now, customJsonSettings);

Казалось, что решение будет столь же простым, как указание Json.NET использовать другую настройку DateTimeZoneHandling. Я пробовал все настройки для DateTimeZoneHandling(Local, Utc, Unspecifiedи RoundtripKind), и все они поддерживайте "-0600" на выходе. На самом деле все они дают одинаковые результаты для не-UTC DateTime.

JsonSerializerSettings customJsonSettings = new JsonSerializerSettings() {
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
string result = JsonConvert.SerializeObject(DateTime.Now, customJsonSettings);
"\/Date(1333647855743-0600)\/"

Предостережение.

В идеале я бы уже все свое время указал в формате UTC. Я определенно планирую сделать это в следующей версии этого API. Поскольку это работающий API, не стоит рисковать изменением вывода, пока не будет выпущена новая версия. Похоже, это не проблема для большинства систем синтаксического анализа JSON, но я не могу рисковать этим изменением, поскольку стандарт JSON официально ничего не говорит о сериализации даты.

20
задан patridge 6 April 2012 в 18:25
поделиться