Ответ 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
.
Подробнее см. Пользовательские строки формата даты и времени в документации.