写点什么

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

作者:追逐时光者
  • 2025-10-20
    广东
  • 本文字数:2126 字

    阅读完需:约 7 分钟

前言

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

参考文章

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

发布于: 刚刚阅读数: 3
用户头像

不积跬步无以至千里,不积小流无以成江海! 2020-01-14 加入

微软MVP、华为云HCDE、华为云云享专家、51CTO专家博主、阿里云专家博主、博客园推荐博客、CSDN博客专家、腾讯云创作之星、掘金优秀创作者,一个热爱开源的全栈软件工程师,擅长C#、.NET、Vue等相关技术开发。

评论

发布
暂无评论
在.NET Web API设置响应输出Json数据格式常用的两种方式_C#_追逐时光者_InfoQ写作社区