设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

查看: 1312|回复: 4

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

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
45
主题
38
精华
0
金钱
129
积分
83
注册时间
2023-7-30
最后登录
2025-8-25

发表于 2024-9-12 02:34:14 | 显示全部楼层 |阅读模式
目录
  • 前言
  • JSON序列化和反序列化库
    • System.Text.Json
    • Newtonsoft.Json
  • 需求设置统一格式
    • 未配置之前的API输出Json数据
      • UserInfoModel
      • UserInfoController
      • 输出Json数据
    • System.Text.Json程序全局配置
      • 添加自定义时间输出格式类(DateTimeJsonConverter)
      • 在Program.cs中全局配置
      • 配置后输出的Json数据
    • Newtonsoft.Json程序全局配置
      • 说明
      • 在Program.cs中全局配置
      • 配置后输出的Json数据
    • DotNetGuide技术社区交流群
      • 参考文章

        前言

        在ASP.NET Core Web API中设置响应输出Json数据格式常用以下两种方式:可以通过添加

        1. System.Text.Json
        复制代码
        1. Newtonsoft.Json
        复制代码
        JSON序列化和反序列化库在应用程序中全局设置接口响应的Json数据格式。

        1. 注意:本文示例使用的是新的Minimal API模式。
        复制代码

        JSON序列化和反序列化库

        System.Text.Json

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

        Newtonsoft.Json

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

        需求设置统一格式

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

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

        UserInfoModel

        1. public class UserInfoModel
        2. {
        3. public DateTime DateTime { get; set; }
        4. public int NumberIndex { get; set; }
        5. public string UserName { get; set; }
        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(1, 5).Select(index => new UserInfoModel
        10. {
        11. DateTime = DateTime.Now.AddDays(index),
        12. NumberIndex = Random.Shared.Next(-20, 55),
        13. UserName = NameList[Random.Shared.Next(NameList.Length)]
        14. }).ToArray();
        15. }
        16. }
        复制代码

        输出Json数据

        1.png

        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数据

        2.png

        Newtonsoft.Json程序全局配置

        说明

        在.NET 3.0及其以上的版本使用Newtonsoft.Json需要通过安装 

        1. Microsoft.AspNetCore.Mvc.NewtonsoftJson
        复制代码
         包来进行配置(注意假如提示该包安装失败可以尝试安装其他版本的包)。

        3.png

        在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数据

        4.png

        DotNetGuide技术社区交流群

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

        参考文章

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

        到此这篇关于在.NET Web API设置响应输出Json数据格式常用的两种方式的文章就介绍到这了,更多相关.NET Web API响应输出Json数据格式内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!


        免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
        晓枫资讯-科技资讯社区-免责声明
        免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
              1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
              2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
              3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
              4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
              5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
        http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

          离线 

        TA的专栏

        • 打卡等级:无名新人
        • 打卡总天数:2
        • 打卡月天数:0
        • 打卡总奖励:27
        • 最近打卡:2025-08-30 01:01:35
        等级头衔

        等級:晓枫资讯-列兵

        在线时间
        0 小时

        积分成就
        威望
        0
        贡献
        0
        主题
        0
        精华
        0
        金钱
        40
        积分
        6
        注册时间
        2023-12-11
        最后登录
        2025-8-30

        发表于 2024-10-9 09:50:32 | 显示全部楼层
        顶顶更健康!!!
        http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

          离线 

        TA的专栏

        等级头衔

        等級:晓枫资讯-列兵

        在线时间
        0 小时

        积分成就
        威望
        0
        贡献
        0
        主题
        0
        精华
        0
        金钱
        22
        积分
        24
        注册时间
        2022-12-30
        最后登录
        2022-12-30

        发表于 2024-11-21 09:30:47 | 显示全部楼层
        感谢楼主,顶。
        http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

          离线 

        TA的专栏

        等级头衔

        等級:晓枫资讯-列兵

        在线时间
        0 小时

        积分成就
        威望
        0
        贡献
        0
        主题
        0
        精华
        0
        金钱
        11
        积分
        2
        注册时间
        2024-12-24
        最后登录
        2024-12-24

        发表于 2025-2-17 12:42:14 | 显示全部楼层
        路过,支持一下
        http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

          离线 

        TA的专栏

        等级头衔

        等級:晓枫资讯-列兵

        在线时间
        0 小时

        积分成就
        威望
        0
        贡献
        0
        主题
        0
        精华
        0
        金钱
        20
        积分
        20
        注册时间
        2022-12-26
        最后登录
        2022-12-26

        发表于 2025-4-7 21:06:25 | 显示全部楼层
        感谢楼主分享。
        http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
        严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
        您需要登录后才可以回帖 登录 | 立即注册

        本版积分规则

        1楼
        2楼
        3楼
        4楼
        5楼

        手机版|晓枫资讯--科技资讯社区 本站已运行

        CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

        晓枫资讯--科技资讯社区

        本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

        如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

        Powered by Discuz! X3.5

        快速回复 返回顶部 返回列表