.Net之接口文档精度丢失处理

目的

最近两天在给朋友讲解如何使用ajax调用接口时候,我发现我用swagger调用接口返回的long类型的数据最后几位都变成了0(例如:6974150586715898000),本来是以为sqlite数据库不支持long类型导致我存进去的数据出了问题,然后我使用接口测试工具调用后发现数据是正确的。然后想到之前听前端同事说过他们没有long类型他们使用的字符串来处理的我返回的long类型,那么就思考如何去处理swagger这个问题吧。

这个这两天才发现,说明我真的好久没有swagger调用接口了,虽然展示了,然后只是展示了。

解决方案

既然前端同事是通过字符串来处理的,那么我当然也可以转成字符串之后再返回出去。我是使用的Newtonsoft.Json做解析Json的,所以修改默认的解析

首先我们需要修改Swashbuckle.AspNetCore.Newtonsoft包默认的解析处理DefaultContractResolver,针对long类型做特殊处理

public class CustomContractResolver : DefaultContractResolver
{/// <summary>/// 对长整型做处理/// </summary>/// <param name="objectType"></param>/// <returns></returns>protected override JsonConverter ResolveContractConverter(Type objectType){if (objectType == typeof(long)){return new JsonConverterLong();}return base.ResolveContractConverter(objectType);}
}

JsonConverterLong内容如下

/// <summary>
/// Long类型Json序列化重写
/// 在js中传输会导致精度丢失,故而在序列化时转换成字符类型
/// </summary>
public class JsonConverterLong : JsonConverter
{/// <summary>/// 是否可以转换/// </summary>/// <param name="objectType"></param>/// <returns></returns>public override bool CanConvert(Type objectType){return true;}/// <summary>/// 读json/// </summary>/// <param name="reader"></param>/// <param name="objectType"></param>/// <param name="existingValue"></param>/// <param name="serializer"></param>/// <returns></returns>public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer){if ((reader.ValueType == null || reader.ValueType == typeof(long?)) && reader.Value == null){return null;}else{_ = long.TryParse(reader.Value != null ? reader.Value.ToString() : "", out long value);return value;}}/// <summary>/// 写json/// </summary>/// <param name="writer"></param>/// <param name="value"></param>/// <param name="serializer"></param>public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer){if (value == null)writer.WriteValue(value);elsewriter.WriteValue(value.ToString());}
}

在上面编写结束之后我们还需要进行配置也就是设置SerializerSettings

services.AddControllers().AddNewtonsoftJson(options =>
{//时间格式化options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";//swagger显示枚举options.SerializerSettings.Converters.Add(new StringEnumConverter());// 设置自定义序列化options.SerializerSettings.ContractResolver = new CustomContractResolver();
});

最后再次使用swagger界面调用返回值已经变成了6974150586715897857,成功解决问题。

总结

关于这个精度丢失的问题这次是第二次遇到了,上次是使用Apifox升级之后就出现了这个问题,然后我还去提了bug,结果是因为更新之后出来了一个兼容bigint的开关并且默认是关闭状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 访问sqlite,android中访问已有的sqlite数据库

推荐文章每天进步记录一点点话说经常性的操作svn出现各种问题,而度娘一直帮倒忙,是不是很手足无措.有时问题还是要记录下来的.说不定还会有惊喜. 昨天遇到个问题,搜索了一下,发现第一条就是自己写的.惊呆我了,更惊呆我的是,我是在csdn写的,为什么在别的网站看到,完全一模一样..…

Dnslog在SQL注入中的利用

参考文献&#xff1a;www.anquanke.com/post/id/98096https://bbs.pediy.com/thread-223881.htm DNSlog在Web攻击的利用 在某些无法直接利用漏洞获得回显的情况下&#xff0c;但是目标可以发起DNS请求&#xff0c;这个时候就可以通过DNSlog把想获得的数据外带出来。 常用情况 S…

让泛型的思维扎根在脑海——深刻理解泛型

1.前言往往一些刚接触C#编程的初学者&#xff0c;对于泛型的认识就是直接跳到对泛型集合的使用上&#xff0c;虽然微软为我们提供了很多内置的泛型类型&#xff0c;但是如果我们只是片面的了解调用方式&#xff0c;这会导致我们对泛型盲目的使用。至于为什么要使用泛型&#xf…

fgetcsv()函数

fgetcsv()函数。fgetcsv()函数可以读取指定文件的当前行&#xff0c;使用CSV格式解析出字段&#xff0c;并返回一个包含这些字段的数组。语法格式如下&#xff1a;array fgetcsv(resource $handle [, int $length [, string $delimiter [, string $enclosure[,string $escape]]…

android 系统ui修改器,分享两个效果 - Android 系统 UI 管理

SystemUIManage.gifDimming the System Bars (沉浸模式)知乎 和 Medium 中都使用到了这个效果&#xff0c;作为沉浸式阅读模式。// This example uses decor view, but you can use any visible view.View decorView getWindow().getDecorView();int uiOptions View.SYSTEM_U…

打游戏要存进度-备忘录模式

打游戏要存进度-备忘录模式 学习自 《大话设计模式》 备忘录模式漫谈 备忘录的这种设计思想是非常常见的&#xff0c;比如说围棋游戏的悔棋&#xff0c;绘图软件的撤销功能等等&#xff0c;都或多或少的使用了备忘录模式来处理对象的状态。 备忘录(Memento): 在不破坏封装性的前…

(10.1)Python学习笔记二

1、在项目工程中要模块化测试一个开发的功能&#xff0c;在测试通过后交付给项目组其他人员继续开发。要保证代码开发的性能和效率以及可扩展性。 2、项目工程中的文件夹分类要功能模块明确清晰&#xff0c;在python中引入某一个 文件夹下的文件可以使用如下方式&#xff1a; t…

利用lay-ui结合ajax实现分页功能(不借助框架,简单易懂)

效果图: 1.创建html页面 01.html(前台文件) 2.创建index.php(后台文件) ------------------热身结束,开始正式分页之旅------------------ 3.在html页面中引入layui需要用到的css以及js,还有我们自己额外需要用到的jquery 4.在html文件中,将基本的分页栏显示出来 5.好啦,htm…

Linux系统压缩及解压缩

Linux系统解压缩概述&#xff1a;本篇将介绍Linux系统中的压缩和解压缩的工具&#xff0c;以及归档工具&#xff08;tar&#xff0c;cpio&#xff09;compress/uncompress&#xff1a;对应 .Z 结尾的压缩格式文件&#xff1b;gzip/gunzip&#xff1a;其对应的是 .gz 结尾的压缩…

酷派手机android版本,系统版本迎来升级

系统版本迎来升级这个应该是两个版本之间最大但是却不那么直观的不同了&#xff0c;因为从TD版酷派大神F1采用的CoolLife UI 5.0版本&#xff0c;再到联通版酷派大神F1所搭载的CoolLife UI 5.5版本&#xff0c;它们之间经历了一个比较不错的升级。在图标ICON&#xff0c;功能设…

学习RUNOOB.COM进度一

了解MongoDB 由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 特点 面向文档&#xff0c;操作简单容易 设置任何索引&#xff0c;实现更快排序 本地或者网络创建数据镜像&am…

最终用户计算安全——特权访问控制

本篇算是系列的第二篇&#xff0c;之前写了一篇关于勒索软件攻击的&#xff0c;坦白说写这样的文很费脑子&#xff0c;而且喜欢看的读者估计也不多…不过我觉得整理一下思路&#xff0c;对于通过最终用户计算产品或方案来提升组织安全还是有很大的意义的。所以一边喝着清茶吃着…

MVC学习九:MVC 特性本质

一、特性的本质就是&#xff1a;对属性、方法、类加特性&#xff0c;本质就是new 一个特性类对象赋值给属性、方法、类。 可以通过反射的方式取得特性的值&#xff0c;代码如下&#xff1a; ①自定义特性 public class MyAttribute:Attribute{public string Name { get; set; }…

前端知识点总结---面试专用

1.关于基础css html js部分 1.1基本算法 1&#xff09;快速排序 时间复杂度 nlogn function quickSort(arr){if (arr.length<1){return arr;}var pivotIndex 0,pivort arr.splice(pivortIndex, 1)[0];var left [],right [];for (var i 1, length arr.length; i < l…

鸿蒙系统大疆,华为操作系统“鸿蒙OS”来了!

原标题&#xff1a;华为操作系统“鸿蒙OS”来了&#xff01;8月9日&#xff0c;华为消费者业务CEO余承东在华为开发者大会上如期发布了华为鸿蒙操作系统“HarmonyOS”。据介绍&#xff0c;鸿蒙内核在2017年便完成技术验证&#xff0c;最初是为了提升操作系统的跨平台能力而研发…

详述 IntelliJ IDEA 插件的安装及使用方法

首先&#xff0c;进入插件安装界面&#xff1a; Mac&#xff1a;IntelliJ IDEA -> Preferences -> Plugins;Windows&#xff1a;File -> Settings -> Plugins.标注 1&#xff1a;显示 IntelliJ IDEA 的插件分类&#xff0c; All plugins&#xff1a;显示 IntelliJ …

杭漂两年,深漂两年,宇宙的尽头到底在哪儿

hi&#xff0c;这里是桑小榆。这次分享的是一位杭漂两年&#xff0c;深漂两年的码农伙伴的经历。首先他能够在大学期间就寻找到自己的热爱并持之以恒值得令人学习。其次他的工作经历可以说是非常的“程序员”&#xff0c;因为程序员所面对的职业生涯中&#xff0c;所谓的实习&a…

侣信即时通讯系统的技术解析

侣信&#xff1a; 说明&#xff1a; 侣信专业版是面向中小企业和者各类团队组织内部交流使用工具,可以在互联网或者局域网中使用。具有丰富的功能&#xff0c;聊天&#xff0c;群组&#xff0c;部门组织&#xff0c;内部朋友圈&#xff0c;以及漂流瓶摇一摇等功能。它可以在局域…

Confluence 6 使用 WebDAV 客户端来对页面进行操作

下面的部分告诉你如何在不同的系统中来设置原生的 WebDAV 客户端&#xff0c;这个客户端通常显示在你操作系统的文件浏览器中&#xff0c;例如&#xff0c;Windows 的 Windows Explorer 或者 Linux 的 Konqueror。在 Mac OSX Finder 中访问 Confluence你可以成功的连接&#xf…