c# - C# ASP.NET WebApi (2/Core 3.1) 大数字的 Json 序列化问题
问题描述
我有一个大数字(Int64/UInt64)被 ASP.NET Json 序列化舍入的问题。这发生在 ASP.NET WebApi2 (.NET 4.5.2) 以及 ASP.NET Core WebApi (Core 3.1) 中。
这是我的 DTO 类:
public class TestDTO
{
public IEnumerable<long> BigNumbers { get; set; }
}
这是我的控制器方法:
[HttpGet]
public IHttpActionResult GetNumberTest()
{
TestDTO dto = new TestDTO
{
BigNumbers = new long[]
{
121720000000004554,
21720000000004554,
1720000000004554,
720000000004554,
}
};
return Ok(dto);
}
这是结果:
{
"bigNumbers": [
121720000000004560,
21720000000004550,
1720000000004554,
720000000004554
]
}
如您所见,前两个数字已四舍五入(第一个向上舍入,第二个向下舍入),后两个未四舍五入。当然,这可能是致命的行为。如何禁用此行为?
奇怪的是......当我通过Newtonsoft.Json(JsonConvert.SerializeObject)手动序列化DTO时,结果是正确的。
我知道当我将数字序列化为字符串时它会起作用,但在我看来,这并不是解决问题的真正方法。我应该能够依赖我的 DTO 的正确序列化。
任何人都可以帮助我吗?
解决方案
事实证明,序列化的原始数据是正确的。这只是通过 JavaScript 对 SwaggerUi / Firefox 的可视化导致了这个问题。
推荐阅读
- java - 如何使用 BufferedReader 类从用户那里获取字符和字符串输入?
- java - BLE,如何停止扫描
- c++ - Arduino Nano 33 IoT & NEO 6M GPS 模块
- three.js - 从 Blender 到三个 js 的 3d 模型遇到问题
- statistics - 我们如何对连续 X 和 Y 变量进行假设检验
- c# - 可以使用 Json.net 将自定义序列化程序放入被序列化的对象中吗?
- javascript - 使用javascript将多个css-property box-shadowes添加到一个元素
- node.js - 如何让我的 User.findByIdAndUpdate 仅在密码设置为我的新密码后运行?
- r - 在绘图标题中组合文本和数学符号
- java - 在 Eclipse 中安装 glassfish 时出错