ASP.NET Core Web API设置响应输出的Json数据格式的两种方式

news2024/11/16 19:29:39

前言

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

设置Json统一格式需求

  1. 修改属性名称的序列化方式,在.Net Core中默认使用小驼峰序列化Json属性参数,前端想要使用与后端模型本身命名格式输出(如:UserName)。

  1. 日期类型默认格式化处理,设置为: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; }
    }

UserInfoControlle

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

文章转载自:追逐时光者

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1262400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Labview Lite Note

目录 001十六进制字符串转浮点数002浮点数转十六进制字符串 001十六进制字符串转浮点数 002浮点数转十六进制字符串

森林无人机高效解决巡查难题,林区防火掀新篇

山东省某市为了强化森林火灾防范&#xff0c;采用了一项新兴手段——复亚智能无人机森林火情监测系统。这套系统在AI飞行大脑的指挥下&#xff0c;让无人机在空中巡逻&#xff0c;实现了无人机森林防火系统的实施落地。 一、AI大脑如何引领森林无人机高空巡逻&#xff1f; 在山…

区块链存证:杭州互联网法院备选方案之一

文章目录 背景上报的存证系统设计备选方案***总体原则******分层架构******基础节点******存证链******存证业务******存证接入******通用功能******跨链对接架构***业务流程描述用户发起原创内容存证&#xff08;对应上图中左边1,2,3活动&#xff09;发现侵权行为&#xff0c;…

迷你洗衣机哪个牌子好又实惠?小型洗衣机质量排名

随着大家工作的压力越来越大&#xff0c;下了班之后只能想躺平&#xff0c;在洗完澡之后看着还需要手洗的内衣裤真的很头疼。有些小伙伴还有会攒几天再丢进去洗衣机里面一起&#xff0c;而且这样子是非常不好的&#xff0c;用过的内衣裤长时间不清洗容易滋生细菌&#xff0c;而…

HCIP-九、路由控制

九、路由控制 实验拓扑实验需求及解法1.企业生产网运行 OSPF&#xff0c;完成以下需求&#xff1a;2.数据中心运行 ISIS3.路由引入4.路由策略5.策略路由6.ISP 过滤私网路由 实验拓扑 实验需求及解法 1.企业生产网运行 OSPF&#xff0c;完成以下需求&#xff1a; 1.1 OSPF 进程…

Snagit 2024.0.1(Mac屏幕截图软件)

Snagit 2024是一款屏幕截图工具&#xff0c;可以帮助用户轻松捕获、编辑和分享屏幕截图。该工具在Mac上运行&#xff0c;旨在满足用户对于屏幕截图的各种需求。 Snagit 2024支持屏幕录制功能&#xff0c;可以录制摄像头和麦克风等外部设备&#xff0c;让用户录制更加全面的视频…

新农村污水集中处理需要哪些设备

新农村的污水处理问题日益凸显&#xff0c;为了保护农村环境和人民健康&#xff0c;污水集中处理成为一项急需解决的任务。那么&#xff0c;新农村污水集中处理需要哪些设备呢&#xff1f; 首先&#xff0c;污水集中处理系统需要一个有效的污水收集设备。这个设备可以是污水管…

【Linux驱动开发】环境搭建Linux驱动开发环境

环境搭建Linux驱动开发环境 1. 简单描述2. 资源3. 安装4. 基本操作和设置 1. 简单描述 基于讯为电子rk3568教程 2. 资源 下载 VMware Workstation Pro 17 链接 Ubuntu 桌面版&#xff08;64位&#xff09; 链接 3. 安装 需要选择自定义硬件&#xff08;内存大于16g 硬盘500g…

代码随想录算法训练营第35天| 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球

JAVA代码编写 860.柠檬水找零 在柠檬水摊上&#xff0c;每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品&#xff0c;&#xff08;按账单 bills 支付的顺序&#xff09;一次购买一杯。 每位顾客只买一杯柠檬水&#xff0c;然后向你付 5 美元、10 美元或 20 美元。你必须…

C++不同平台下的RTTI实现

给定一个含有虚函数的对象的地址&#xff0c;找到对应的类名&#xff0c;不同平台下方法也不同&#xff0c;这是由于RTTI实现并没有统一的标准。 Linux&#xff1a; #include <iostream> #include <typeinfo>class Person { public:virtual void func(){std::cout…

【DeepLearning.AI】吴恩达系列课程——使用Gradio构建AI应用

目录 前言一、Gradio介绍1-1、Gradio介绍1-2、安装1-3、小栗子 二、使用Gradio构建AI应用2-1、NLP任务2-1-1、文本摘要2-1-2、命名实体识别 2-2、聊天任务&#xff08;ChatYuan&#xff09;2-2-1、模型介绍2-2-2、模型下载、参数设置2-2-3、模型测试2-2-4、嵌入到Gradio里2-2-5…

大学生奖学金答辩模板

大学生奖学金答辩模板 前言大学生奖学金答辩模板自制答辩稿 前言 未经同意&#xff0c;请勿转载&#xff0c;请勿商用 这里share 一下近期做的PPT&#xff0c;目前已经抽离成模板&#xff0c;在PPT演讲备注中添加了相关的替换规则及稿子。 这里主要做的是SCUT的模板&#xff0…

如何生成唯一ID:探讨常用方法与技术应用

文章目录 1. UUID&#xff08;Universally Unique Identifier&#xff09;2. 数据库自增ID3. Twitter的Snowflake算法4. 数据库全局唯一ID&#xff08;Global Unique Identifier&#xff0c;GUID&#xff09;结语 &#x1f389;如何生成唯一ID&#xff1a;探讨常用方法与技术应…

vue3(三)-基础入门之v-model双向绑定、v-model修饰符

一、v-model 双向绑定 监听用户的输入事件来实时更新数据&#xff0c;多用于表单 input、textarea以及select元素上 <div id"app"><input type"text" v-model"myInputText" /><!-- 等价于&#xff1a; --><input type&qu…

Vue基础入门(四):Vue3快速开发模板

快速开发Vue的解决方案 ​ Vue 的开发需要的 node 环境&#xff0c;其实上在开发的过程中会遇到一些你想不到的问题&#xff0c;比如 npm工具的版本和 node 环境不匹配&#xff08;你把其他项目导入到自己的环境&#xff09; ​ vue-element-admin&#xff08;是一个官方提供…

网络安全小白自学

一、网络安全应该怎么学&#xff1f; 1.计算机基础需要过关 这一步跟网安关系暂时不大&#xff0c;是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通&#xff0c;可以与学习其他课程同步进行。 2.渗透技…

buuctf web [RoarCTF 2019]Easy Calc

试了一下&#xff0c;数字可以计算&#xff0c;但字符被过滤了&#xff0c;打开源码看看 源码里提示&#xff0c;有waf,并且发现了一个新页面 访问新页面 show_source&#xff08;&#xff09; show_source()函数用于将指定文件的源代码输出到浏览器或者写入到文件中。 show_s…

【日常总结】优雅升级Swagger 2 升至 3.0, 全局设置 content-type application/json

目录 一、场景 二、问题 三、解决方案 四、延伸 上一节&#xff1a;【日常总结】Swagger-ui 导入 showdoc &#xff08;优雅升级Swagger 2 升至 3.0&#xff09;-CSDN博客 一、场景 接上一节&#xff1a;在 Swagger3Config extends WebMvcConfigurationSupport&#xff0c…

好看的css样式案例网站

uiverse 网站地址&#xff1a;https://uiverse.io/all 比如说我们要这个案例的代码 点击get code就可以了 右侧有完整的示例代码。 svg波浪生成器 网站&#xff1a;https://getwaves.io/ 根据自己需求调节好之后点击这个下载按钮就可以了

【阅读记录】《联邦学习》杨强

第2章 隐私、安全及机器学习 2.3 威胁与安全模型 2.3.1 隐私威胁模型 对机器学习系统的攻击可能在任何阶段发生&#xff0c;包括数据发布、模型训练和模型推理。 模型训练阶段&#xff1a;重构攻击&#xff08;避免使用寻存储显式特征值的模型&#xff0c;SVM KNN等&…