在.NET Web API设置响应输出Json数据格式常用的两种方式

前言

在ASP.NET Core Web API中设置响应输出Json数据格式常用以下两种方式:可以通过添加System.Text.JsonNewtonsoft.JsonJSON序列化和反序列化库在应用程序中全局设置接口响应的Json数据格式。

注意:本文示例使用的是新的Minimal API模式。

JSON序列化和反序列化库

System.Text.Json

System.Text.Json是 .NET Core 3.0 及以上版本中内置的 JSON 序列化和反序列化库。

Newtonsoft.Json

Newtonsoft.Json是一个功能强大且灵活的.NET JSON序列化和反序列化库,用于在.NET应用程序中处理JSON数据。

需求设置统一格式

  1. 修改属性名称的序列化方式,在.Net Core中默认使用小驼峰序列化Json属性参数,前端想要使用与后端模型本身命名格式输出(如:UserName)。
  2. 日期类型默认格式化处理,设置为:yyyy-MM-dd HH:mm:ss。

未配置之前的API输出Json数据

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[] { "追逐时光者", "小明同学", "DotNetGuide", "小艺同学", "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数据

System.Text.Json程序全局配置

添加自定义时间输出格式类(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 =>`
`            {`
`                //命名规则,该值指定用于将对象上的属性名称转换为另一种格式(例如驼峰大小写)或为空以保持属性名称不变的策略[前端想要使用与后端模型本身命名格式输出]。`
`                options.JsonSerializerOptions.PropertyNamingPolicy = null;`

`                //自定义输出的时间格式`
`                options.JsonSerializerOptions.Converters.Add(new DateTimeJsonConverter());`
`            });`

配置后输出的Json数据

Newtonsoft.Json程序全局配置

说明

在.NET 3.0及其以上的版本使用Newtonsoft.Json需要通过安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包来进行配置(注意假如提示该包安装失败可以尝试安装其他版本的包)。

在Program.cs中全局配置

复制代码
`            builder.Services.AddControllers().AddNewtonsoftJson(options =>`
`            {`
`                //修改属性名称的序列化方式[前端想要使用与后端模型本身命名格式输出]`
`                options.SerializerSettings.ContractResolver = null;`

`                //方式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";`
`            });`

配置后输出的Json数据

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群👪

参考文章

相关推荐
追逐时光者1 天前
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
【.net】·【c#】·【.net core】·【技术前沿周刊】
追逐时光者2 天前
基于.NET开源、功能强大且灵活的工作流引擎框架
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者2 天前
精选2款C#/.NET开源且功能强大的网络通信框架
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者4 天前
MudBlazor:基于Material Design风格开源且强大的Blazor组件库
【.net】·【c#】·【开源项目】·【.net core】·【blazor】
追逐时光者5 天前
一款.NET开源的屏幕实时翻译工具
【.net】·【c#】·【开源项目】·【实用工具】
追逐时光者6 天前
C# 单例模式的多种实现
【.net】·【c#】·【.net core】·【拾遗补漏】·【设计模式】
追逐时光者7 天前
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
【.net】·【c#】·【开源项目】·【.net core】·【拾遗补漏】
追逐时光者7 天前
2款使用.NET开发的数据库系统
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者9 天前
.NET开发者福音:JetBrains官方宣布 Rider 非商用免费开放!
【.net】·【c#】·【实用工具】·【.net core】
追逐时光者11 天前
C#/.NET/.NET Core技术前沿周刊 | 第 11 期(2024年10.21-10.31)
【.net】·【c#】·【.net core】·【技术前沿周刊】