#asp.net-core #json.net
#asp.net-core #json.net
Вопрос:
Я начал перенос нашего веб-приложения .Net Framework на .Net Core 5 на работе. Я заметил, что даты, возвращаемые в SPA, были отключены, и после дальнейшего расследования я увидел, что после сериализации объектов даты были установлены как UTC.
Я обнаружил, что могу заставить его работать при сериализации / десериализации, добавив параметр в качестве аргумента, но, похоже, это должно выполняться глобально, а не при каждом запуске сериализатора.
Я попытался добавить следующее в WebAPI Startup.cs, чтобы изменить способ возврата дат, но, похоже, это не работает при запуске:
services.AddControllers().AddNewtonsoftJson(o => o.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Unspecified);
Комментарии:
1. Привет @MRR0GERS, мой ответ помог вам решить вашу проблему? Если да, не могли бы вы принять это в качестве ответа? Если нет, не могли бы вы продолжить, чтобы сообщить мне об этом? См. раздел: Как принять в качестве ответа . Спасибо.
2. Извиняюсь, @Rena, я до сих пор не тестировал ваше решение, и оно работает отлично. Спасибо!
Ответ №1:
Добавьте это:
services.AddControllers().AddNewtonsoftJson();
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Unspecified
};
Ответ №2:
Мне пришлось преобразовать в формат UTC (DateTimeZoneHandling.Utc) и вышеуказанные способы (DateTimeZoneHandling) у меня не сработали. Наконец, ниже сработало:
.AddNewtonsoftJson(opts =>
{
opts.SerializerSettings.Converters.Add(new IsoDateTimeConverter
{
DateTimeStyles = DateTimeStyles.AdjustToUniversal
});
}
Я надеюсь, что это поможет людям, которые хотят преобразовать формат даты и времени в UTC по всему миру.