首页 > 其他分享 >在.NET Web API设置响应输出Json数据格式常用的两种方式

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

时间:2024-07-21 13:07:46浏览次数:14  
标签:Web DateTime public Json 数据格式 NET 序列化 options

前言

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

标签:Web,DateTime,public,Json,数据格式,NET,序列化,options
From: https://www.cnblogs.com/Can-daydayup/p/18314367

相关文章

  • 基于JavaWeb的同城外卖推荐系统的设计与实现
    摘 要鉴于移动互联网和外卖市场的迅速发展,越来越多的人开始选择通过外卖服务订餐。然而,现有的外卖平台存在一些问题,例如口味偏好不匹配、菜品推荐不够准确等等。因此,开发了同城外卖推荐系统,旨在提供更加个性化和准确的外卖推荐服务,帮助用户快速找到心仪的餐厅和菜品。本系......
  • DRF如何反序列化json?
    我使用React作为前端,django作为后端。我使用fetchAPI向服务器发送POST请求。数据通过JSON.stringify()传递。该请求将被Django中的视图拦截,数据可在视图函数的请求参数中获取。至少这是我所理解的。现在,当我访问request.body时,我惊讶地得到了一个字典。......
  • 使用idea创建Javaweb项目(步骤)
    第一步创建Javaweb项目File>New>Project第二步  勾选WebApplication >Next然后就是进行起名,完成。完成创建项目,检查是否文件齐全配置tomcat配置好,就能启动tomcat,显示首页导入jar包。导入进项目,然后编写类......
  • Vip积分管理系统项目JavaWeb开发流程
    1.项目概述1维护客户,提升火锅店运营效率。2目标用户:​ 明确系统的主要用户为火锅店的店长或管理员。1.3系统目标:​提供全面的积分管理功能。​简化日常运营流程。​提供深入的数据分析和报告功能。2.功能需求系统登录与权......
  • [CISCN2019 华北赛区 Day1 Web2]ikun 1
    目录题目分析jwtjwt介绍jwt伪造picklepickle.loads()pickle.dumps()urllib.unquote()Python反序列化题目分析先注册账号,然后登录目标是买到lv6,page参数代表不同页面写个脚本寻找存在lv6的页面importrequestsurl='http://48741e8e-30ab-4b63-a3a0-be94862b22......
  • 史上最强的管理监控工具之Ollama-webui
    目录欢迎关注微信公众号:数据科学与艺术Ollama-webui是一个管理和监控工具,用于管理和监控Ollama应用程序。以下是使用Ollama-webui的详细操作步骤:首先,确保你已经正确安装了Ollama和Ollama-webui。你可以从官方网站下载最新的版本并按照安装说明进行安装。安装完成......
  • web服务器1
    (1)仅提供用户浏览的单向静态网页单纯是由服务器单向提供数据给客户端,Server不需要与client端有互动,所以你可以到该网站上去浏览,但是无法进行数据的上传。(2)提供用户互动接口的动态网站这种类型的网站可以让服务器与用户互动,常见的例如留言板,博客。这种类......
  • 如何将 JSON 数据写入文件?
    如何将存储在字典data中的JSON数据写入文件?f=open('data.json','wb')f.write(data)这会给出错误:TypeError:Mustbestringorbuffer,notdict这个错误提示你不能直接将一个字典写入文件,你需要先将它转换为字符串。Python的json库可......
  • 将 Met Office 数据点 JSON 读入 Panda
    我正在使用MetOfficeDatapointAPI下载JSON格式的英国天气数据。然后我想将该JSON文件读入pandasDataFrame。JSON文件的格式如图所示{"SiteRep":{"Wx":{"Param":[{"name":"FDm","units":"C","$":"FeelsLikeDa......
  • WebKit 引擎:WebSockets 的幕后英雄
    WebKit引擎:WebSockets的幕后英雄在现代Web应用中,WebSockets提供了一种在用户和服务器之间建立持久、全双工通信的方法。与传统的HTTP请求相比,WebSockets可以减少通信开销,提高性能,并支持实时通信。WebKit作为许多流行浏览器的底层引擎,对WebSockets的支持至关重要。本文将......