前言
在ASP.NET Core Web API中設(shè)置響應(yīng)輸出Json數(shù)據(jù)格式有兩種方式,可以通過添加System.Text.Json
或Newtonsoft.Json
JSON序列化和反序列化庫(kù)在應(yīng)用程序中全局設(shè)置接口響應(yīng)的Json數(shù)據(jù)格式,本文示例使用的是新的Minimal API模式。
JSON序列化和反序列化庫(kù)
System.Text.Json
System.Text.Json是 .NET Core 3.0 及以上版本中內(nèi)置的 JSON 序列化和反序列化庫(kù)。
Newtonsoft.Json
Newtonsoft.Json是一個(gè)功能強(qiáng)大且靈活的.NET JSON序列化和反序列化庫(kù),用于在.NET應(yīng)用程序中處理JSON數(shù)據(jù)。
設(shè)置Json統(tǒng)一格式需求
修改屬性名稱的序列化方式,在.Net Core中默認(rèn)使用小駝峰序列化Json屬性參數(shù),前端想要使用與后端模型本身命名格式輸出(如:UserName)。
日期類型默認(rèn)格式化處理,設(shè)置為:yyyy-MM-dd HH:mm:ss。
未配置之前的API輸出Json數(shù)據(jù)
UserInfoModel
public class UserInfoModel
{
public DateTime DateTime { get; set; }
public int NumberIndex { get; set; }
public string UserName { get; set; }
}
UserInfoController
[ApiController]
[Route("[controller]")]
public class UserInfoController : ControllerBase
{
private static readonly string[] NameList = new[] { "追逐時(shí)光者", "小明同學(xué)", "DotNetGuide", "小藝同學(xué)", "Edwin" };
[HttpGet(Name = "GetUserInfo")]
public IEnumerable<UserInfoModel> Get()
{
return Enumerable.Range(1, 5).select(index => new UserInfoModel
{
DateTime = DateTime.Now.AddDays(index),
NumberIndex = Random.Shared.Next(-20, 55),
UserName = NameList[Random.Shared.Next(NameList.Length)]
}).ToArray();
}
}
輸出Json數(shù)據(jù)
System.Text.Json程序全局配置
添加自定義時(shí)間輸出格式類(DateTimeJsonConverter)
public class DateTimeJsonConverter : JsonConverter<DateTime>
{
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return DateTime.Parse(reader.GetString());
}
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
在Program.cs中全局配置
builder.Services.AddControllers().AddJsonOptions(options =>
{
//命名規(guī)則,該值指定用于將對(duì)象上的屬性名稱轉(zhuǎn)換為另一種格式(例如駝峰大小寫)或?yàn)榭找员3謱傩悦Q不變的策略[前端想要使用與后端模型本身命名格式輸出]。
options.JsonSerializerOptions.PropertyNamingPolicy = null;
//自定義輸出的時(shí)間格式
options.JsonSerializerOptions.Converters.Add(new DateTimeJsonConverter());
});
配置后輸出的Json數(shù)據(jù)
Newtonsoft.Json程序全局配置
說明
在.NET 3.0及其以上的版本使用Newtonsoft.Json需要通過安裝 Microsoft.AspNetCore.Mvc.NewtonsoftJson
包來進(jìn)行配置(注意假如提示該包安裝失敗可以嘗試安裝其他版本的包)。
在Program.cs中全局配置
builder.Services.AddControllers().AddNewtonsoftJson(options =>
{
//修改屬性名稱的序列化方式[前端想要使用與后端模型本身命名格式輸出]
options.SerializerSettings.ContractResolver = null;
//方式1:日期類型默認(rèn)格式化處理
options.SerializerSettings.Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });
//方式2:日期類型默認(rèn)格式化處理
//options.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;
//options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
});
配置后輸出的Json數(shù)據(jù)
參考文章
作者:追逐時(shí)光者
來源:https://www.cnblogs.com/Can-daydayup/p/17860547.html
該文章在 2023/11/29 9:52:32 編輯過