前言
在ASP.NET Core Web API中设置响应输出Json数据格式有两种方式,可以通过添加System.Text.Json
或Newtonsoft.Json
JSON序列化和反序列化库在应用程序中全局设置接口响应的Json数据格式,本文示例使用的是新的Minimal API模式。
JSON序列化和反序列化库
System.Text.Json
System.Text.Json是 .NET Core 3.0 及以上版本中内置的 JSON 序列化和反序列化库。
Newtonsoft.Json
Newtonsoft.Json是一个功能强大且灵活的.NET JSON序列化和反序列化库,用于在.NET应用程序中处理JSON数据。
设置Json统一格式需求
- 修改属性名称的序列化方式,在.Net Core中默认使用小驼峰序列化Json属性参数,前端想要使用与后端模型本身命名格式输出(如:UserName)。
- 日期类型默认格式化处理,设置为:yyyy-MM-dd HH:mm:ss。
未配置之前的API输出Json数据
UserInfoModel
publicclassUserInfoModel
{
publicDateTimeDateTime{get;set;}
publicintNumberIndex{get;set;}
publicstringUserName{get;set;}
}
UserInfoController
[ApiController]
[Route("[controller]")]
publicclassUserInfoController:ControllerBase
{
privatestaticreadonlystring[]NameList=new[]{"追逐时光者","小明同学","DotNetGuide","小艺同学","Edwin"};
[HttpGet(Name="GetUserInfo")]
publicIEnumerableGet()
{
returnEnumerable.Range(1,5).Select(index=>newUserInfoModel
{
DateTime=DateTime.Now.AddDays(index),
NumberIndex=Random.Shared.Next(-20,55),
UserName=NameList[Random.Shared.Next(NameList.Length)]
}).ToArray();
}
}
输出Json数据
System.Text.Json程序全局配置
添加自定义时间输出格式类(DateTimeJsonConverter)
publicclassDateTimeJsonConverter:JsonConverter
{
publicoverrideDateTimeRead(refUtf8JsonReaderreader,TypetypeToConvert,JsonSerializerOptionsoptions)
{
returnDateTime.Parse(reader.GetString());
}
publicoverridevoidWrite(Utf8JsonWriterwriter,DateTimevalue,JsonSerializerOptionsoptions)
{
writer.WriteStringValue(value.ToString("yyyy-MM-ddHH:mm:ss"));
}
}
在Program.cs中全局配置
builder.Services.AddControllers().AddJsonOptions(options=>
{
//命名规则,该值指定用于将对象上的属性名称转换为另一种格式(例如驼峰大小写)或为空以保持属性名称不变的策略[前端想要使用与后端模型本身命名格式输出]。
options.JsonSerializerOptions.PropertyNamingPolicy=null;
//自定义输出的时间格式
options.JsonSerializerOptions.Converters.Add(newDateTimeJsonConverter());
});
配置后输出的Json数据
Newtonsoft.Json程序全局配置
说明
在.NET 3.0及其以上的版本使用Newtonsoft.Json需要通过安装Microsoft.AspNetCore.Mv服务器托管网c.NewtonsoftJson
包来进行配置(注意假如提示该包安装失败可以尝试安装其他版本的包)。
在Program.cs中全局配置
builder.Services.AddControllers().AddNewtonsoftJson(options=>
{
//修改属性名称的序列化方式[前端想要使用与后端模型本身命名格式输出]
options.SerializerSettings.ContractResolver=null;
//方式1:日期类型默认格式化处理
options.SerializerSet服务器托管网tings.Converters.Add(newIsoDateTimeConverter(){DateTimeFormat="yyyy-MM-ddHH:mm:ss"});
//方式2:日期类型默认格式化处理
//options.SerializerSettings.DateFormatHandling=Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;
//options.SerializerSettings.DateFormatString="yyyy-MM-ddHH:mm:ss";
});
配置后输出的Json数据
DotNetGuide技术社区交流群
- DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
- 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
- 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。
欢迎加入DotNetGuide技术社区微信交流群
参考文章
- https://learn.microsoft.com/zh-cn/aspnet/core/web-api/advanced/formatting?view=aspnetcore-6.0
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net