.net ядро ​​3, не имеющее ReferenceLoopHandling в AddJsonOptions - PullRequest
1 голос
/ 19 сентября 2019

Мой файл csproject указывает: <TargetFramework>netcoreapp3.0</TargetFramework>

В моем запуске я использую следующее:

 services.AddMvc(x => x.Filters.AddService<TransactionFilter>())
        .AddJsonOptions(options => options.JsonSerializerOptions... )

Но, ReferenceLoopHandling недоступен внутри options.JsonSerializerOptions.

enter image description here

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="FluentNHibernate" Version="2.1.2" />
    <PackageReference Include="FullContact.Contacts.API" Version="1.0.3" />
    <PackageReference Include="Google.Cloud.Storage.V1" Version="2.3.0" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Cors" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Json" Version="2.2.0" />
    <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="5.5.0" />
    <PackageReference Include="MySql.Data" Version="8.0.17" />
    <PackageReference Include="piplclient" Version="5.0.9" />
    <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.5.0" />
  </ItemGroup>

</Project>

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Как упоминалось выше, вам нужно установить Microsoft.AspNetCore.Mvc.NewtonsoftJson , Microsoft.AspNetCore.SignalR.Protocols.Newtonsoft и настроить с помощью AddNewtonsoftJsonProtocol чтобы по-прежнему использовать Newtonsoft вместо System.Text.Json (ReferenceLoopHandling еще не доступен)

Для SignalR это будет

 services.AddSignalR()
                     .AddNewtonsoftJsonProtocol(
                         p => { p.PayloadSerializerSettings.ReferenceLoopHandling =
 ReferenceLoopHandling.Ignore; });
1 голос
/ 29 сентября 2019

Прежде всего вы должны установить Microsoft.AspNetCore.Mvc.NewtonsoftJson в диспетчере пакетов Nuget.затем используйте как это в файле запуска:

services.AddMvc().AddNewtonsoftJson(options =>{options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;});
1 голос
/ 19 сентября 2019

В рамках работы по улучшению общей платформы ASP.NET Core , Json.NET была удалена из общей платформы ASP.NET Core.Вашему приложению может потребоваться эта ссылка, если оно использует специфическую для Newtonsoft.Json функцию, такую ​​как JsonPatch или конвертеры, или если оно форматирует Типы, специфичные для Newtonsoft.Json.

Для использования Json.NET вПроект ASP.NET Core 3.0:

Добавление ссылки на пакет в Microsoft.AspNetCore.Mvc.NewtonsoftJson .

Обновление Startup.ConfigureServices для вызова AddNewtonsoftJson.

services.AddMvc()
.AddNewtonsoftJson();

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

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

Ссылка:

https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-2.2&tabs=visual-studio#jsonnet-support

https://stackoverflow.com/a/55666898/10201850

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...