Куда пошли AddJsonOptions IMvcBuilder в .Net Core 3.0? - PullRequest
4 голосов
/ 13 апреля 2019

Я только что обновил свой проект веб-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' может быть найдено (являются Вы пропустили директиву использования или ссылку на сборку?)

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

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

1 Ответ

6 голосов
/ 13 апреля 2019

В рамках 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() { … };
    });
...