Заставить 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 миллисекунд.

  • Сериализовать статический class?
  • Как получить json.net для сериализации членов classа, полученных из List ?
  • ТипNameHandling предостережение в Newtonsoft Json
  • Сериализация типа Json.Net с полиморфным дочерним объектом
  • Служба WCF Максимальная квота длины массива (16384) превышена
  • Игнорирование нулевых полей в Json.net
  • Каковы различия между XmlSerializer и BinaryFormatter
  • Сериализация JSON массива с полиморфными объектами
  • Невозможно десериализовать lambda
  • Невозможно сериализовать словарь с помощью сложного ключа с помощью Json.net
  • Получение ServiceStack для сохранения информации о типе
  • Interesting Posts

    Запустить операционную систему с двойной загрузкой

    Какова конкретная проблема с множественным наследованием?

    Рассчитать количество будних дней между двумя датами в Java

    Проверка на стороне сервера с помощью CXF Webservice

    Понимание регулярного выражения в Java: split (“\ t”) vs split (“\\ t”) – когда они оба работают, и когда они должны использоваться

    Перенос из нераспределенных таблиц в разделы

    Есть ли способ удалить запрещенные разрешения из группы для папки, если у меня нет доступа?

    Каковы HTML и XML, специальные символы?

    Как я могу перетасовать строки текстового файла в командной строке Unix или в сценарии оболочки?

    Ваш USB может работать быстрее?

    Синхронный запрос в Node.js

    Переустановите два старых диска из raid0 setup для восстановления данных

    Каков наилучший способ реализовать «запомнить меня» для веб-сайта?

    Является ли datareader быстрее, чем dataset при заполнении данных?

    Распознавание речи на iPhone

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