Куда пошли AddJsonOptions IMvcBuilder в .Net Core 3.0?

Я только что обновил свой проект веб-API ASP с .Net core 2.0 до 3.0. Я использовал

     services.AddMvc()
             .AddJsonOptions(options =>options.SerializerSettings.ContractResolver 
                                       = new DefaultContractResolver());

ранее, чтобы обеспечить нижний регистр сериализованного JSON.

После обновления до 3.0 я получаю эту ошибку...

Ошибка CS1061 "IMvcBuilder" не содержит определения для "AddJsonOptions" и недоступный метод расширения "AddJsonOptions" Принимая первый аргумент типа 'IMvcBuilder' может быть найдено (являются вы пропустили директиву using или ссылку на сборку?)

Согласно AddJsonOptions для MvcJsonOptions в Asp.Net Core 2.2 метод расширения AddJsonOptions предоставляется/был предоставлен пакетом nuget для Microsoft.AspNetCore.Mvc.Formatters.Json. Я попытался установить/переустановить это, но все еще не могу решить метод. Интересно отметить, что intellisense показывает только Microsoft.AspNetCore.Mvc.Formatters.Xml, когда я пытаюсь добавить оператор using, даже если я добавил пакет Jget nuget.

Есть идеи, что происходит? документация для AddJsonOptions распространяется только на .Net 2.2, поэтому, возможно, этот метод устарел в версии 3.0 в пользу какого-то другого механизма конфигурации?

Ответы

Ответ 1

В рамках ASP.NET Core 3.0 команда отошла от включения Json.NET по умолчанию. Вы можете прочитать больше об этом в общем в объявлении о критических изменениях в Microsoft.AspNetCore.App.

Вместо Json.NET ASP.NET Core 3.0 и .NET Core 3.0 включают другой API-интерфейс JSON, который немного больше ориентирован на производительность. Вы можете узнать об этом больше в объявлении о "будущем JSON в .NET Core 3.0".

Новые шаблоны для ASP.NET Core больше не будут поставляться в комплекте с Json.NET, но вы можете легко перенастроить проект, чтобы использовать его вместо новой библиотеки JSON. Это важно как для совместимости со старыми проектами, так и потому, что новая библиотека не должна быть полной заменой, поэтому вы не увидите там полный набор функций.

Чтобы перенастроить свой проект ASP.NET Core 3.0 с Json.NET, вам необходимо добавить ссылку NuGet на Microsoft.AspNetCore.Mvc.NewtonsoftJson, который является пакетом, который включает в себя все необходимые биты. Затем в стартапах ConfigureServices вам нужно будет настроить MVC следующим образом:

services.AddControllers()
    .AddNewtonsoftJson();

Это устанавливает контроллеры MVC и настраивает его на использование Json.NET вместо этого нового API. Вместо контроллеров вы также можете использовать другую перегрузку MVC (например, для контроллеров с представлениями или страницами Razor). Этот метод AddNewtonsoftJson имеет перегрузку, которая позволяет настраивать параметры Json.NET, как вы привыкли использовать с AddJsonOptions в ASP.NET Core 2.x.

services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });

Ответ 2

У меня это сработало (.net core 3)

 services.AddMvc().AddJsonOptions(o =>
                {
                    o.JsonSerializerOptions.PropertyNamingPolicy = null;
                    o.JsonSerializerOptions.DictionaryKeyPolicy = null;
                });