首页 > 解决方案 > 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 的正确序列化。

任何人都可以帮助我吗?

标签: c#asp.netjsonwebapi

解决方案


事实证明,序列化的原始数据是正确的。这只是通过 JavaScript 对 SwaggerUi / Firefox 的可视化导致了这个问题。


推荐阅读