前言:
就目前而言,.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