我是ASP.Net Web API Core的新手。在过去的几年里,我一直在使用ASP.Net MVC,我总是写一个ActionFilter
并使用JSON.Net
将数据Serializing
到JSON
中。因此,通过这种方式,我将Microsoft的JavaScript Serializer
(比JSON.Net
慢)替换为JSON.Net
(据称快400%)。
如何在ASP.Net Web Api Core中完成所有这些操作?在哪里更改默认格式化器?
注意:如果您有任何问题,请随时询问。
谢谢
在 .NET Core 3.0+ 中,包括 NuGet 包Microsoft.AspNetCore.Mvc.NewtonsoftJson
,然后替换
services.AddControllers();
在ConfigureServices
services.AddControllers().AddNewtonsoftJson();
这是 .NET Core 3.0 中的预发布 NuGet 包,但也是 .NET Core 3.1 中的完整发布包。
我自己也遇到过这个问题,但我发现在这个 SO 问题和答案中提供了相同的答案和一些附加信息。
编辑:作为一个有用的更新:调用AddNewtonsoftJson()
的代码将编译并运行,即使不安装Microsoft.AspNetCore.Mvc.NewtonsoftJson
NuGet 包。如果您这样做,它会在安装了两个转换器的情况下运行,但默认为您可能不想要的System.Text.Json
转换器,因为您正在阅读此答案。因此,必须记住安装NuGet 包才能正常工作(如果清除并重做 NuGet 依赖项,请记住重新安装它)。
ASP.NET Core已经使用 JSON.NET,因为JavaScriptSerializer
没有实现/移植到.NET Core。
Microsoft.AspNetCore.Mvc
取决于Microsoft.AspNetCore.Formatter.Json
取决于Microsoft.AspNetCore.JsonPatch
,这取决于Newtonsoft.Json
(见来源)。
更新
这仅适用于 ASP.NET 核心 1.0 到 2.2。 ASP.NET Core 3.0 消除了对 JSON.NET 的依赖,并使用了自己的 JSON 序列化程序。
下面是一个代码片段,用于调整 .NET Core 应用程序的设置
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;
});
}