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



我是ASP.Net Web API Core的新手。在过去的几年里,我一直在使用ASP.Net MVC,我总是写一个ActionFilter并使用JSON.Net将数据SerializingJSON中。因此,通过这种方式,我将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.NewtonsoftJsonNuGet 包。如果您这样做,它会在安装了两个转换器的情况下运行,但默认为您可能不想要的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;
});
}

相关内容

  • 没有找到相关文章

最新更新