前言

在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)。
  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相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
  • 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群

参考文章

ASP.NET Core Web API设置响应输出的Json数据格式的两种方式的更多相关文章

  1. 支持多个版本的ASP.NET Core Web API

    基本配置及说明 版本控制有助于及时推出功能,而不会破坏现有系统. 它还可以帮助为选定的客户提供额外的功能. API版本可以通过不同的方式完成,例如在URL中添加版本或通过自定义标头和通过Accept- ...

  2. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  3. 或许是你应该了解的一些 ASP.NET Core Web API 使用小技巧

    一.前言 在目前的软件开发的潮流中,不管是前后端分离还是服务化改造,后端更多的是通过构建 API 接口服务从而为 web.app.desktop 等各种客户端提供业务支持,如何构建一个符合规范.容易理 ...

  4. Asp.Net Core Web Api 使用 Swagger 生成 api 说明文档

    最近使用 Asp.Net Core Web Api 开发项目服务端.Swagger 是最受欢迎的 REST APIs 文档生成工具之一,进入我的视野.以下为学习应用情况的整理. 一.Swagger 介 ...

  5. ASP.NET Core Web API 教程 - Project Configuration

    ASP.NET Core Web API 教程 本系列文章主要参考了<Ultimate ASP.NET Core 3 Web API>一书,我对原文进行了翻译,同时适当删减.修改了一部分内 ...

  6. 在Mac下创建ASP.NET Core Web API

    在Mac下创建ASP.NET Core Web API 这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢? 原因如下: 官方文档涉 ...

  7. 在ASP.NET Core Web API中为RESTful服务增加对HAL的支持

    HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务 ...

  8. ASP.NET Core Web API 集成测试

    本文需要您了解ASP.NET Core Web API 和 xUnit的相关知识. 这里有xUnit的介绍: https://www.cnblogs.com/cgzl/p/9178672.html#t ...

  9. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...

  10. .net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)

    本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(asp.net c ...

随机推荐

  1. python教程 入门学习笔记 第3天 编程基础常识 代码注释 变量与常量

    编程基础常识 一.注释 1.对代码的说明与解释,它不会被编译执行,也不会显示在编译结果中 2.注释分为:单行注释和多行注释 3.用#号开始,例如:#这是我的第一个python程序 4.注释可以写在单独 ...

  2. Go 语言入门指南: 环境搭建、基础语法和常用特性解析 | 青训营

    Go 语言入门指南: 环境搭建.基础语法和常用特性解析 | 青训营 从零开始 Go 语言简介 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert ...

  3. Weblogic T3协议反序列化命令执行漏洞(CVE-2018- 2628)复现

    好久没发新文章了,躲懒了,是时候该更新一篇了,这一篇是关于WebLogic T3协议反序列化命令执行漏洞(CVE-2018- 2628)的复现,该漏洞是weblogic的经典漏洞,而网上有关的复现稍显 ...

  4. LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介

    前言 今天想和大家分享的是:仪酷LabVIEW AI视觉工具包的VI简介,如介绍内容有误,欢迎各位朋友们帮忙纠正~ 一.AI视觉工具包VI简介 已经安装好的AI工具包位于程序框图-函数选板-Addon ...

  5. AVR汇编(五):算术和逻辑指令

    AVR汇编(五):算术和逻辑指令 算术运算指令 AVR中对于算术运算提供了加法.减法和乘法指令,没有除法指令. ADD ADD 指令用于执行加法操作,相关的变体指令有:一般加法 ADD .带进位加法 ...

  6. 聊一下操作系统-macOS-与-Linux

    聊一下操作系统 macOS 与 Linux 对于Windows操作系统大家都比较熟悉,也常拿它与Linux操作系统进行比较,两者之间的差异也很明显.但对于macOS 和 Linux的比较不太多,很多人 ...

  7. 《代码整洁之道 Clean Code》学习笔记 Part 1

    前段时间在看<架构整洁之道>,里面提到了:构建一个好的软件系统,应该从写整洁代码做起.毕竟,如果建筑使用的砖头质量不佳,再好的架构也无法造就高质量的建筑.趁热打铁,翻出<代码整洁之道 ...

  8. 定义一个函数,传入一个字典和一个元组,将字典的值(key不变)和元组的值交换,返回交换后的字典和元组

    知识点:zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. li=[3,4,5] t=(7,8,9) print(list(zip(li,t ...

  9. Linux查看磁盘空间,文件系统、挂载

    Linux磁盘空间,文件系统.挂载 概述 在使用以下命令查看磁盘使用情况时 df -h du -sh 目标路径 作为初级开发者,Linux入门级选手,可能不禁要问Linux系统的文件系统跟window ...

  10. 前端Vue仿企查查 天眼查知识产权标准信息列表组件

    ​ 引入Vue仿企查查天眼查知识产权标准信息列表组件 随着技术的不断发展,传统的开发方式使得系统的复杂度越来越高.在传统开发过程中,一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改,造成牵一 ...