Json中怎么利用string表示Number属性值
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章将为大家详细讲解有关Json中怎么利用string表示Number属性值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。long类型引发的诡异情
千家信息网最后更新 2025年02月02日Json中怎么利用string表示Number属性值
这篇文章将为大家详细讲解有关Json中怎么利用string表示Number属性值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
long类型引发的诡异情况
长话短说,同事在利用swagger对接后端API时,诡异的发现swaggerUI中显示的json属性值并不是api返回的值。
[HttpGet]
public IActionResult QueryAsync()
{
var testJson = new
{
Id = 123123126964992223,
Profile = "Please attention on Id",
};
return new JsonResult(testJson);
}
该API在swagger输出:
{"Id": 123123126964992220,
"Profile": "Please attention on Id"}
进一步从Chrome->[Network]->[Preview]、[Response payload]观察到该long属性值的差异。
直接给结论:部分long类型值(最大值2^63^-1)会超过Javascript的最大安全Number(2^53^-1), 浏览器/前端 使用JSON.parse(123123126964992223)将不再保证准确性。
将JSON中的数字值作为字符串传输的是为了消除传输中的精度丢失或歧义性。
JSON规范中未给数值指定精度,JSON解析器会自由选择合适的数值精度。如果您的应用程序具有特定的精度要求,那么不同的JSON解析器可能不能正确表达精度。
另外部分long类型值(最大值263-1)会超过Javascript的最大安全Number(253 -1), 前端json反序列化时也会出现错误。
stackoverflow有个解释很赞:
覆写.NET Core序列化框架,将long转化为string
针对NewtonsoftJson编写BigIntJsonConvert
public class BigIntJsonConverter : JsonConverter
{
public override long ReadJson(JsonReader reader, Type objectType, [AllowNull] long existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var flag = long.TryParse(reader.Value.ToString(), out long num);
return flag == true ? num : 0;
}
public override void WriteJson(JsonWriter writer, [AllowNull] long value, JsonSerializer serializer)
{
writer.WriteValue(value.ToString());
}
}
// 截取自Startup.cs ConfigureServices函数
context.Services.AddMvc().AddNewtonsoftJson(options =>
{
options.SerializerSettings.Converters.Add(new BigIntJsonConverter());
});
关于Json中怎么利用string表示Number属性值就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
精度
属性
最大
类型
诡异
安全
内容
前端
序列
数值
文章
更多
最大值
知识
篇文章
部分
传输
不同
不错
合适
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器被挤爆
服务器挂机经验池怎么做
完美世界哪个服务器不卡
直销双轨制软件开发价格
网络技术背景下载
tis服务器是真的吗
银行软件开发中心属于外包吗
非计算机专业学习数据库有用吗
派享云服务器默认密码
辛巴网络安全
什么联网软件不要数据库
少数民族药物保护名录和数据库
杭州中学生网络安全教育
虚拟服务器和saas
中国网络安全厂商竞争分析
市场营销和计算机网络技术薪资
软件开发合同 国标
数据库查询和sql语言
java使用文件类型数据库
TTD数据库搜集成分靶点
系统兼容多个数据库
数据库图书
网络安全教育大会
智能软件机器人rpa软件开发
数据库设计数据表图
分布式数据库组建
成立中央网络安全和信息
关闭服务器管理器
网络安全法属于什么政策
如何查看数据库信息