Не работает настройка .Net Core NewtonsoftJson DateTimeZoneHandling

#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 по всему миру.