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

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

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

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

Мы столкнулись с этой проблемой в моем текущем проекте. Мы используем 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() настройки сериализатора в JsonConvert.SerializeObject() .

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

Для любых Java-пользователей, которые находят этот ответ и хотят разобрать такие временные метки по умолчанию в формате .NET, я хотел бы отметить подход Java 8 ( java.time.* ) Для parsingа формата:

 public static final DateTimeFormatter FORMATTER = new DateTimeFormatterBuilder().appendPattern("yyyy-M-d'T'H:m:s") .appendFraction(ChronoField.MILLI_OF_SECOND, 0, 3, true) .toFormatter(); ... LocalDateTime ldt = LocalDateTime.parse(dateString, FORMATTER); 

Это говорит о ожидании 0-3 цифр дробных миллисекунд, с true для ожидаемой десятичной точки. Он правильно интерпретирует, скажем, «.47» как 470 миллисекунд.

  • Уничтожить stream массива json по одному элементу за раз
  • Как вы делаете глубокую копию объекта в .NET (например, C #)?
  • XSLT: как преобразовать XML-узел в строку
  • Ошибка JSON.NET Локальный цикл привязки для типа
  • Можете ли вы определить, был ли объект, десериализованный объект, отсутствием поля с classом JsonConvert в Json.NET
  • Сериализация / десериализация пользовательской коллекции с дополнительными свойствами с помощью Json.Net
  • Как получить json.net для сериализации членов classа, полученных из List ?
  • Как вы сериализуете объект на C ++?
  • Django rest framework, используйте разные сериализаторы в том же ModelViewSet
  • В чем разница между привязкой лямбды и метода на уровне выполнения?
  • ТипNameHandling предостережение в Newtonsoft Json
  • Interesting Posts

    Как читать определенную строку, используя определенный номер строки из файла на Java?

    Как протестировать отслеживание направления Android?

    Как искать материалы «R»?

    Печать без пробела в python 3

    Как имитировать «Нажмите любую клавишу, чтобы продолжить?»

    При проверке флажка в listview также проверяются другие случайные флажки

    Запуск Windows 10 после обновления

    Как использовать java.util.Scanner, чтобы правильно читать данные пользователя из System.in и действовать на него?

    Автоматически реализовать черты замкнутого типа для новых типов Rust (кортежи с одним полем)

    Как добавить Trace () для каждого вызова метода в C #?

    Определить, распознана ли команда в пакетном файле

    Отобразить HTML как изображение

    Заменить символ по определенному индексу в строке?

    ОШИБКА: Ошибка 1005: невозможно создать таблицу (errno: 121)

    Как отобразить более трех уровней расширяемого вида списка?

    Давайте будем гением компьютера.