首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年07月21日 11:59

前言

在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技术社区微信交流群👪

 

参考文章

 

 

From:https://www.cnblogs.com/Can-daydayup/p/18314367
本文地址: http://shuzixingkong.net/article/241
0评论
提交 加载更多评论
其他文章 《痞子衡嵌入式半月刊》 第 105 期
痞子衡嵌入式半月刊: 第 105 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回
《痞子衡嵌入式半月刊》 第 105 期 《痞子衡嵌入式半月刊》 第 105 期 《痞子衡嵌入式半月刊》 第 105 期
thinkphp5.0 访问不存在的数据或者模块开启404页面并返回404状态码,在404页面中获取abort函数中使用的错误信息
thinkphp5框架默认未开启404页面,都是统一返回的一个异常页面。错误码为500,如果是使用的$this->error()方法则都是返回的200状态码。以前我一直都用的$this->error("page not found");方法来提示页面不存在,现在发现这样对于seo很不友好。因为不存在的数据也返回了200.正常来说,不存在的数据应该返回404.而不是200.否则会让搜索引擎认为是在作弊.thinkphp中针对于http的错误都是使用的异常。可通过abort函数来直接抛出异常。abort可传入http状态码和信息;极为方便。
thinkphp5.0 访问不存在的数据或者模块开启404页面并返回404状态码,在404页面中获取abort函数中使用的错误信息 thinkphp5.0 访问不存在的数据或者模块开启404页面并返回404状态码,在404页面中获取abort函数中使用的错误信息 thinkphp5.0 访问不存在的数据或者模块开启404页面并返回404状态码,在404页面中获取abort函数中使用的错误信息
暑假java自学进度总结02
一.今日所学: 1.配置环境变量 在系统内配置java路径后,再在path中 利用系统路径配置Java编译工具和运行工具路径。 2.下载并安装Natepad++,并且配置相关设置 3.初步了解了Java的发展历程,能干什么,为什么被广泛使用,以及跨平台原理。 4.学习了JDK,JRE,JVE之间的关
暑假java自学进度总结02
Windows11下使用VcXsrv+xfce4实现图形化窗口
通过 sudo apt-get install xfce4-terminal sudo apt-get install xfce4 sudo service dbus restart 来安装所需要的软件包,期初我也是按部就班的通过网上搜索到的教程进行操作,例如: sudo nano ~/.bashr
Windows11下使用VcXsrv+xfce4实现图形化窗口
Packer构建openStack镜像
目录使用Packer自动化构建镜像 使用Packer自动化构建镜像 openstack插件安装:OpenStack | Integrations | Packer | HashiCorp Developer openstack插件用法示例:OpenStack Builder | Integratio
Packer构建openStack镜像 Packer构建openStack镜像
创客13星零售商城系统漏洞审计(0day)任意文件上传+SQL注入+SSRF
创客13星零售商城系统漏洞审计3处(0day) 任意文件上传+SQL注入+SSRF
创客13星零售商城系统漏洞审计(0day)任意文件上传+SQL注入+SSRF 创客13星零售商城系统漏洞审计(0day)任意文件上传+SQL注入+SSRF 创客13星零售商城系统漏洞审计(0day)任意文件上传+SQL注入+SSRF
数据库的性能调优:如何正确的使用索引?
在当今的数据驱动时代,数据库的性能优化成为每个开发者和数据库管理员必须掌握的技能之一。而在众多优化手段中,索引的使用无疑是最为重要和有效的。然而,索引的滥用或误用不仅不会提升性能,反而可能带来额外的开销。那么,如何正确地使用索引,才能真正提升数据库性能呢? 为什么有时我们精心创建的索引却没有带来预期
数据库的性能调优:如何正确的使用索引? 数据库的性能调优:如何正确的使用索引? 数据库的性能调优:如何正确的使用索引?
番外2: go语言写的简要数据同步工具
go-etl工具 作为go-etl工具的作者,想要安利一下这个小巧的数据同步工具,它在同步百万级别的数据时表现极为优异,基本能在几分钟完成数据同步。 1.它能干什么的? go-etl是一个数据同步工具集,目前支持MySQL,postgres,oracle,SQL SERVER,DB2等主流关系型数据
番外2: go语言写的简要数据同步工具 番外2: go语言写的简要数据同步工具 番外2: go语言写的简要数据同步工具