ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

ASP.NET Core MVC 如何用 NewtonsoftJson 处理 WEB API 的 返回值

2021-08-21 12:00:34  阅读:221  来源: 互联网

标签:Core Newtonsoft MVC SerializerSettings Json API 格式 ASP options


参考资料:

asp.net core 3.1 MVC/WebApi JSON 全局配置:

https://cloud.tencent.com/developer/article/1597403

0. 照例吐槽

因为懒,我已经很久没有写过新项目了。记得好像以前 ASP.NET Core 3.1 时代,引入 Newtonsoft.Json 包,就可以直接在 Startup.cs 的 ConfigureServices 方法中 AddNewtonsoftJson 来用它序列化 Web API 的返回值。

最近想学一点前端,写点 MVC ,但即使 MVC ,有时候也要在前端用ajax等来调用后端的接口取一些值,也就是说 MVC 的 Controller 中有时候也要返回 Json 格式的数据。

今天建了个 ASP.NET Core 5.0 的新项目,引入 Newtonsoft.Json:

然后在 ConfigureServices 中 Add 一下:

发现Add不进去,没有这个方法。

1. 引入包

在 nuget.org 上检索时,我发现了这么一个包:

包名里还带个 MVC ,10天之前刚更新过,显然这个包就是给 MVC 的项目用的。引入进去。这里我引入的是 5.0 的版本,因为我创建的项目是 ASP.NET Core 5.0 的:

然后这里就有了:

2. 尝试使用

上面 Add 完之后,Newtonsoft.Json 就接管了内置的库,来为我们序列化返回值了。我们写一个接口尝试一下:

用 Postman 请求一下:

可以看到,即使我们返回的对象的属性,如NameAge,都是大写字母开头,NewtonsoftJson 也帮我们默认转换成了更加规范通用的驼峰式命名方法。目前唯一的缺点就是时间类型是中间带个T字母的格式。

最近我在工作中,跟我对接的一个IOS开发人员跑路了,因为钱给的很低,暂时没招到新人,就由他的领导来接手代码。他的领导虽然只放下了代码几个月,但水平已经下降得非常厉害(可能本来就很菜),他绞尽脑汁没办法处理中间代个T字母的时间格式,我没搞过IOS开发,我也不知道他为什么处理不了。只能对在他接手的这段时间里新增的几个接口做特殊处理。我在想以后的项目最好是全局处理成常规的时间格式,这样就需要一些全局的配置:

3. 全局配置(时间格式,忽略null,忽略循环引用)

即使 NewtonsoftJson 默认帮我们做了很多更通用的序列化配置,我们还是要掌握一些基本的配置方法。本篇博客最上面的参考资料链接的那篇文章中,给出了官方库 System.Text.Json 和 Newtonsoft.Json 较多常用的配置方法:

上面给出了我们需要的时间格式处理,忽略空值等,我们应用在项目里:

services.AddControllersWithViews()
    .AddNewtonsoftJson(options => {
        options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";                        // 设置时间格式
        options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;            // 忽略循环引用
        //options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 数据格式首字母小写
        //options.SerializerSettings.ContractResolver = new DefaultContractResolver();                // 数据格式按原样输出
        options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;                    // 忽略空值
    });

再次调用接口,发现时间的格式变了:

我们再看一下空值的处理,我们不给一个 string 类型的参数赋值,则该参数默认为 null :

再次调用接口:

发现 Continent 已经被忽略了。

4. 其它

Microsoft.AspNetCore.Mvc.NewtonsoftJson 这个包肯定是依赖了 Newtonsoft.Json :

所以我们应该不必另外引入 Newtonsoft.Json 了。把这个包 Remove 掉,restore 一下,然后可以发现 Newtonsoft.Json 的功能依然可以使用:

标签:Core,Newtonsoft,MVC,SerializerSettings,Json,API,格式,ASP,options
来源: https://www.cnblogs.com/Kit-L/p/15169205.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有