前言

在ASP.NET Core Web API中设置响应输出Json数据格式有两种方式,可以通过添加System.Text.Json或Newtonsoft.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. 如何操作(增、删、改、查)常见的 HTML 元素呢?(包含原生 js 和 JQuery 语法对照)

    一.通用的操作示例 1.查询 根据 id 查询(结果为单个对象) // 原生 js 写法 var elementobj = document.getElementById("elementi ...

  2. 熟悉又陌生的package.json

    前言 随着前端的不断发展,package.json可谓是在前端项目中无处不在,它不仅在项目根目录会有,而且在 node_modules 中也存在.那么这个文件到底是干嘛的,又有什么作用?很多人对它的认 ...

  3. MySql Workbench 迁移工具 migration 提示缺少pyodbc 2.1.8 的解决方法

    想把公司的数据库转到MySQL,所以想装个MySQL测试,发现新版的MySQL(8.0.34)默认安装还是有不少问题, 一.譬如表.字段大小写的问题: lower_case_table_names=0 ...

  4. Python之os模块常用命令

    OS模块介绍 os模块是Python标准库中的一个用于访问操作系统相关功能的模块,os模块提供了一种可移植的使用 操作系统功能的方法.使用os模块中提供的接口,可以实现跨平台访问.该模块包含了大量的操 ...

  5. 给DataTable添加额外字段

    //dt为DataTable dt.Columns.Add("字段名");//创建字段 //给新增字段赋值 foreach(DataRow item in dt.Rows) { i ...

  6. 【项目源码】JSP超市积分管理系统源码下载

    会员积分管理系统的目标是为中小规模的会员积分管理系统的目标是为中小规模的超市提供会员信息管理.会员积分管理以及积分兑换管理的具体解决方案. 网站和积分管理系统采用B/S结构,使用J2EE的技术开发完成 ...

  7. 多主架构:VLDB技术论文《Taurus MM: bringing multi-master to the cloud》解读

    本文分享自华为云社区<多主创新,让云数据库性能更卓越>,作者: GaussDB 数据库. 华为<Taurus MM: bringing multi-master to the clo ...

  8. ContentPresenter使用DataTemplate

    在使用自定义样式内容时,有时也需要在自定义样式中绑定一下数据模板 可以使用ContentPresenter的ContentTemplate绑定定义好的资源 DateTemplate 用法代码如下 &l ...

  9. ES6-ES11最通俗易懂保姆级的笔记!人见人爱,花见花开。赶快动起你发财的小手收藏起来吧,满满的干货,你值得拥有!!

    1.  ES6 1.1  let变量声明以及声明特性 声明变量 let a; let b, c, e; let f = 100, g = "红石榴21", h = []; 特性: ...

  10. 其它——Apache-ab压力测试工具使用

    文章目录 一 介绍 二 安装 2.1 windows安装 2.2 Linux安装 三 使用 四 参数介绍 一 介绍 Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工 ...