IMvcBuilder AddJsonOptions 在.Net Core 3.0 中去了哪里?

Where did IMvcBuilder AddJsonOptions go in .Net Core 3.0?

我刚刚将我的 ASP 网络 API 项目从 .Net core 2.0 升级到 3.0。我正在使用

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

以前确保序列化的小写 JSON。

升级到 3.0 后出现此错误:

Error CS1061 'IMvcBuilder' does not contain a definition for 'AddJsonOptions' and no accessible extension method 'AddJsonOptions' accepting a first argument of type 'IMvcBuilder' could be found (are you missing a using directive or an assembly reference?)

根据 Microsoft.AspNetCore.Mvc.Formatters.Json nuget包提供的AddJsonOptions扩展方法is/was。我已经尝试 installing/reinstalling 这个方法,但仍然无法解决该方法。有趣的是,即使我添加了 Json[,当我尝试添加 using 语句时,intellisense 只显示 Microsoft.AspNetCore.Mvc.Formatters.Xml nuget 包。

知道发生了什么事吗? AddJsonOptionsdocumentation 仅适用于 .Net 2.2,所以也许该方法在 3.0 中已被弃用,取而代之的是其他一些配置机制?

作为 ASP.NET Core 3.0 的一部分,团队不再默认包含 Json.NET。您可以在 announcement on breaking changes to Microsoft.AspNetCore.App.

中阅读更多相关信息。

与 Json.NET 不同,ASP.NET Core 3.0 和 .NET Core 3.0 包含不同的 JSON API,它更侧重于性能。您可以在 announcement about “The future of JSON in .NET Core 3.0”.

中了解更多信息

ASP.NET Core 的新模板将不再与 Json.NET 捆绑在一起,但您可以轻松地重新配置项目以使用它而不是新的 JSON 库。这对于与旧项目的兼容性都很重要,而且因为新库不应该是一个完整的替代品,所以你不会在那里看到完整的功能集。

为了使用 Json.NET 重新配置您的 ASP.NET Core 3.0 项目,您需要添加对 Microsoft.AspNetCore.Mvc.NewtonsoftJson 的 NuGet 引用,这是包含所有必要位的包.然后,在 Startup 的 ConfigureServices 中,您需要像这样配置 MVC:

services.AddControllers()
    .AddNewtonsoftJson();

这会设置 MVC 控制器并将其配置为使用 Json.NET 而不是新的 API。除了控制器,您还可以使用不同的 MVC 重载(例如,用于具有视图或 Razor 页面的控制器)。该 AddNewtonsoftJson 方法有一个重载,允许您配置 Json.NET 选项,就像您在 ASP.NET Core 2.x.[=18= 中习惯使用 AddJsonOptions 一样]

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

这对我有用,同时使用 .Net Core 3:

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

这会有所帮助

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")));
        }

这将有助于尝试安装 Nuget 包

Microsoft.AspNetCore.Mvc.NewtonsoftJson

它对我有用,从 NuGet 安装 NewtonsoftJson 包“dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 3.1.0” version 3.1.0 working for ASP.NET Core 3.0 并使用以下代码-

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

希望一切顺利,谢谢。

确保您安装了 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包。

这对我有用,在使用 .Net Core 3 时: click here