WebApi 中使用AddNewtonsoftJson输出Json格式数据
前言:
就目前而言,.Net Core WebApi中输出格式几乎都是json,但是在core中使用任何服务都需要配置,这里需要配置 AddNewtonsoftJson
一、我们来看一个例子:
[Route("details")]
[HttpGet]
public ActionResult<JObject> Details()
{
var data = new
{
Id=1,
Name="Lucy",
Address="珠穆朗玛峰",
Time = DateTime.Now
};
return JObject.FromObject(data);
}
不做任何配置,输出:
可以看出,并没有输出我们想要的数据。
处理方法:
我们需要在Startup类中添加AddNewtonsoftJson配置
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddNewtonsoftJson();
}
结果输出:
得到正确的数据。
二、关于AddNewtonsoftJson
ASP.NET Core 3.0 之前的版本中,默认设置使用通过 Newtonsoft.Json 包实现的 JSON 格式化程序。 在 ASP.NET Core 3.0 或更高版本中,默认 JSON 格式化程序基于 System.Text.Json。
Newtonsoft.Json通过安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet 包并在中进行配置,可获得对基于的格式化程序和功能的支持 Startup.ConfigureServices 。
AddNewtonsoftJson方法具有重载功能,可以进行多项配置,以下是一些常用的配置
services.AddControllers()
.AddNewtonsoftJson(options =>
{
//修改属性名称的序列化方式,首字母小写,即驼峰样式
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
//日期类型默认格式化处理 方式1
options.SerializerSettings.Converters.Add(new IsoDateTimeConverter(){DateTimeFormat = "yyyy/MM/dd HH:mm:ss"});
//日期类型默认格式化处理 方式2
options.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;
options.SerializerSettings.DateFormatString = "yyyy/MM/dd HH:mm:ss";
//忽略循环引用
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
//解决命名不一致问题
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
//空值处理
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
从例子中可以看出,配置后的时间格式已经被格式化了。
微软官方文档地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-api/advanced/formatting?view=aspnetcore-5.0