如何在Asp.net Core Web Api中使用Newtonsoft.Json作为默认值?

Sup*_*der 24 serialization json json.net asp.net-web-api asp.net-core

我是ASP.Net Web Api Core的新手.我一直在使用ASP.Net MVC过去的几年里,我一直都写了ActionFilter,并用于JSON.NetSerializing数据导入JSON.所以,通过这种方式,我取代了微软JavaScript Serializer(比它慢JSON.Net)JSON.Net(声称速度提高了400%).

如何在ASP.Net Web Api Core中完成所有这些操作?在哪里更改默认格式化程序

注意:如果您有任何疑问,请随时询问.

谢谢

Mik*_*ton 41

在 .NET Core 3.0+ 中包含 NuGet 包Microsoft.AspNetCore.Mvc.NewtonsoftJson,然后替换

services.AddControllers();

Run Code Online (Sandbox Code Playgroud)

ConfigureServices

services.AddControllers().AddNewtonsoftJson();

Run Code Online (Sandbox Code Playgroud)

这是 .NET Core 3.0 中的预发布 NuGet 包,但 .NET Core 3.1 中的完整发布包。

我自己遇到过这个问题,但我发现在这个 SO question and answer 中有一些附加信息的相同答案

编辑:作为一个有用的更新:AddNewtonsoftJson()即使不安装Microsoft.AspNetCore.Mvc.NewtonsoftJsonNuGet 包,调用 的代码也会编译和运行。如果你这样做,它会在安装了两个转换器的情况下运行,但默认为System.Text.Json你可能不想要的转换器,因为你正在阅读这个答案。因此,您必须记住安装 NuGet 包以使其正常工作(如果您清除并重做 NuGet 依赖项请记住重新安装它)。


Tse*_*eng 29

ASP.NET Core已经使用JSON.NET,因为JavaScriptSerializer它没有实现/移植到.NET Core.

Microsoft.AspNetCore.Mvc取决于Microsoft.AspNetCore.Formatter.Json其取决于Microsoft.AspNetCore.JsonPatch,这取决于Newtonsoft.Json(见).

  • @SuperCoder:没错.然而,它将加载由MVC引用的版本(从ASP.NET Core MVC 1.1开始的9.0.1).如果你想要一个更新的版本(例如Json.NET 9.0.2-beta2),那么你需要自己将你自己的引用添加到你的应用程序csproj/project.json (3认同)

Kie*_*ran 5

这是一个代码片段,用于调整.net核心应用程序的设置

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddMvc()
        .AddJsonOptions(options => {
            // send back a ISO date
            var settings = options.SerializerSettings;
            settings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat;
            // dont mess with case of properties
            var resolver = options.SerializerSettings.ContractResolver as DefaultContractResolver;
            resolver.NamingStrategy = null;
        });
}
Run Code Online (Sandbox Code Playgroud)

  • 此代码用于设置Newtonsoft.json的默认配置,而不用于更改序列化程序。 (2认同)