当前位置:   article > 正文

.NET Web API设置响应输出的Json数据格式的两种方式_.net 6.0 api 如何设置接口参数必须是json

.net 6.0 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

  1.     public class UserInfoModel
  2.     {
  3.         public DateTime DateTime { getset; }
  4.         public int NumberIndex { getset; }
  5.         public string UserName { getset; }
  6.     }

UserInfoController

  1.     [ApiController]
  2.     [Route("[controller]")]
  3.     public class UserInfoController : ControllerBase
  4.     {
  5.         private static readonly string[] NameList = new[] { "追逐时光者""小明同学""DotNetGuide""小艺同学""Edwin" };
  6.         [HttpGet(Name = "GetUserInfo")]
  7.         public IEnumerable<UserInfoModel> Get()
  8.         {
  9.             return Enumerable.Range(15).Select(index => new UserInfoModel
  10.             {
  11.                 DateTime = DateTime.Now.AddDays(index),
  12.                 NumberIndex = Random.Shared.Next(-2055),
  13.                 UserName = NameList[Random.Shared.Next(NameList.Length)]
  14.             }).ToArray();
  15.         }
  16.     }

输出Json数据

图片

System.Text.Json程序全局配置

添加自定义时间输出格式类(DateTimeJsonConverter)

  1.     public class DateTimeJsonConverter : JsonConverter<DateTime>
  2.     {
  3.         public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
  4.         {
  5.             return DateTime.Parse(reader.GetString());
  6.         }
  7.         public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
  8.         {
  9.             writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss"));
  10.         }
  11.     }

在Program.cs中全局配置

  1.             builder.Services.AddControllers().AddJsonOptions(options =>
  2.             {
  3.                 //命名规则,该值指定用于将对象上的属性名称转换为另一种格式(例如驼峰大小写)或为空以保持属性名称不变的策略[前端想要使用与后端模型本身命名格式输出]。
  4.                 options.JsonSerializerOptions.PropertyNamingPolicy = null;
  5.                 //自定义输出的时间格式
  6.                 options.JsonSerializerOptions.Converters.Add(new DateTimeJsonConverter());
  7.             });

配置后输出的Json数据

图片

Newtonsoft.Json程序全局配置

说明

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

图片

在Program.cs中全局配置

  1.             builder.Services.AddControllers().AddNewtonsoftJson(options =>
  2.             {
  3.                 //修改属性名称的序列化方式[前端想要使用与后端模型本身命名格式输出]
  4.                 options.SerializerSettings.ContractResolver = null;
  5.                 //方式1:日期类型默认格式化处理 
  6.                 options.SerializerSettings.Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });
  7.                 //方式2:日期类型默认格式化处理 
  8.                 //options.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;
  9.                 //options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
  10.             });

配置后输出的Json数据

图片

参考文章

  • https://learn.microsoft.com/zh-cn/aspnet/core/web-api/advanced/formatting?view=aspnetcore-6.0

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/550378
推荐阅读
相关标签
  

闽ICP备14008679号