Куда пошли 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 в пользу какого-то другого механизма конфигурации?

7 ответов

Решение

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

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

На данный момент предварительные выпуски ASP.NET Core 3.0 все еще включают Json.NET, так как работа над новым API еще не завершена. Тем не менее, выпуски уже поставляют код, который делает Json.NET необязательной зависимостью. Если вы посмотрите на файл проекта в текущих шаблонах, вы увидите, что есть ссылка на Microsoft.AspNetCore.Mvc.NewtonsoftJson, Это в основном пакет, который позволяет вам продолжать использовать Json.NET в ASP.NET Core 3.0, если вы хотите это сделать (есть много причин, почему это было бы желательно).

в ConfigureServicesтекущие шаблоны также имеют следующий код:

services.AddMvc()
    .AddNewtonsoftJson();

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

services.AddMvc()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings = new JsonSerializerSettings() { … };
    });

Это сработало для меня при использовании .Net Core 3:

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

Убедитесь, что вы установили пакет Microsoft.AspNetCore.Mvc.NewtonsoftJson.

Это работает для меня, установите пакет NewtonsoftJson из NuGet "dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 3.1.0" версия 3.1.0, работающий для ASP.NET Core 3.0, и используйте следующий код -

      services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
    .AddNewtonsoftJson(opt => {
        opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
    });

Надеюсь, все работает нормально, спасибо.

Это поможет попробовать установить пакет Nuget

Microsoft.AspNetCore.Mvc.NewtonsoftJson

Это поможет

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers().AddJsonOptions(options=> {  options.JsonSerializerOptions.PropertyNamingPolicy = null;
                 options.JsonSerializerOptions.DictionaryKeyPolicy = null;

            });

            services.AddDbContext<PaymentDetailContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DevConnection")));
        }

Это сработало для меня при использовании .Net Core 3:нажмите здесь

Другие вопросы по тегам