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

时间:2017-02-17 06:24:50

标签: json serialization asp.net-web-api asp.net-core json.net

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

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

注意:如果您有任何问题,请随时询问。

由于

3 个答案:

答案 0 :(得分:27)

ASP.NET Core已经使用JSON.NET,因为JavaScriptSerializer未实现/移植到.NET Core。

Microsoft.AspNetCore.Mvc取决于Microsoft.AspNetCore.Formatter.JsonMicrosoft.AspNetCore.JsonPatch取决于Newtonsoft.Json,这取决于#include <stdio.h> #include <iostream> #include <ctime> #include <cstdlib> using namespace std; void iterativeSum(int); int RecursiveSum(int); int main() { long long posInt; std::cout << "Enter a positive integer: "; std::cin >> posInt; int start_s=clock(); iterativeSum(posInt); int stop_s=clock(); int start_s1=clock(); cout << "\nThe recursive algorithm to sum the first N integers of "<< posInt << " is: "<< RecursiveSum(posInt) << endl; int stop_s1=clock(); cout << "time: " << (stop_s-start_s)/double(CLOCKS_PER_SEC)/1000 << endl; cout << "time: " << (stop_s1-start_s1)/double(CLOCKS_PER_SEC)/1000 << endl; return 0; } void iterativeSum(int posInt) { //positive Integer >=0 int sum = 0; //loop through and get only postive integers and sum them up. // postcondion met at i = 0 for(int i = 0; i <= posInt;i++) { sum +=i; } //output the positive integers to the screen std::cout <<"\nThe iterative algorithm to sum the first N integers of " <<posInt <<" is: " << sum << "\n"; } int RecursiveSum(int n) { if(n == 1) // base case { return 1; } else { return n + RecursiveSum(n - 1); //This is n + (n - 1) + (n - 2) .... } } (请参阅source)。

更新

这仅适用于ASP.NET Core 1.0到2.2。 ASP.NET Core 3.0消除了对JSON.NET的依赖,并使用它自己的JSON序列化程序。

答案 1 :(得分:25)

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

services.AddControllers();

ConfigureServices

services.AddControllers().AddNewtonsoftJson();

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

我自己遇到了这个问题,但是我发现this SO question and answer中包含相同的答案以及一些其他信息。

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

答案 2 :(得分: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;
        });
}