我是 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 中完成所有这些操作?在哪里更改默认格式化程序?
注意:如果您有任何问题,请随时询问。
由于
答案 0 :(得分:27)
ASP.NET Core已经使用JSON.NET,因为JavaScriptSerializer
未实现/移植到.NET Core。
Microsoft.AspNetCore.Mvc
取决于Microsoft.AspNetCore.Formatter.Json
,Microsoft.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;
});
}