经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JSON » 查看文章
在.NET Web API设置响应输出Json数据格式常用的两种方式
来源:cnblogs  作者:追逐时光者  时间:2024/7/22 9:33:30  对本文有异议

前言

在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
        {
            public DateTime DateTime { get; set; }

            public int NumberIndex { get; set; }

            public string UserName { get; set; }
        }

UserInfoController

  1.     [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)

  1.     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中全局配置

  1.             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中全局配置

  1.             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技术社区微信交流群??

 

参考文章

 

 

原文链接:https://www.cnblogs.com/Can-daydayup/p/18314367

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号