Подтвердить что ты не робот

Заставить JSON.NET включать миллисекунды при сериализации DateTime (даже если компонент ms равен нулю)

Я использую JSON.NET для сериализации значений DateTime непосредственно из экземпляров объектов (не используя DateTime.ToString() с форматированием).

Есть ли способ заставить JSON.NET включать миллисекунды в сериализации, даже если миллисекундный компонент DateTime равен нулю?

Справочная информация. У меня очень медленный потребитель веб-сервисов для этой конечной точки JSON. Условная логика дорогая для потребителя, поэтому я хотел бы предоставлять одинаковое форматирование данных каждый раз.

4b9b3361

Ответ 1

Мы столкнулись с этой проблемой в моем текущем проекте. Мы используем Web API (и, следовательно, JSON.Net) для реализации REST API. Мы обнаружили, что при сериализации объектов DateTime JSON.Net пропускает завершающие нули из миллисекунд или опускает миллисекунды с даты полностью, если она равна нулю. Наши клиенты ожидали строку времени с фиксированной длиной, равную 3 цифрам за миллисекунды. Мы исправили это, выполнив следующее в Application_Start():

JsonSerializerSettings settings = HttpConfiguration.Formatters.JsonFormatter.SerializerSettings;
IsoDateTimeConverter dateConverter = new IsoDateTimeConverter 
{ 
    DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff'Z'" 
};
settings.Converters.Add(dateConverter);

Если вы не используете веб-API, вы можете сделать то же самое, создав новый экземпляр JsonSerializerSettings, добавив к нему IsoDateTimeConverter, как показано выше, а затем передайте настройки сериализатора на JsonConvert.SerializeObject().

Примечание. Если вы сериализуете DateTimeOffset или локальный DateTime и хотите включить смещение часового пояса, замените цитированный 'Z' в указанном выше формате некорректным K. Подробнее см. Пользовательские строки формата даты и времени в документации.