WEB .NET 5 Newtonsoft 中的序列化 - 最后 2 位数字反序列化不正确

Serialization in WEB .NET 5 Newtonsoft - last 2 digits deserialize incorrectly

我有一个小的 API 请求已发布,但列表中的一个字段反序列化不正确。

我现在有 classes:

A class 用于将一些数据发送到 API(只是长类型的 ID 列表,客户端应用程序):

public class PostDTO 
{
  public List<long> Ids { get; set; }
}

在服务器上运行的 API 项目中的另一个 class:

public class RequestDTO
{
  public List<long> Ids { get; set; }
}

现在控制器中的主要方法:

[HttpPost("v2/{testNumber}")]public async Task<IActionResult> PostV2(int someNumber, [FromBody] PostDTO receivedData)

{
    
}

我正在使用 Swagger UI 测试这个东西。当我 post 列表中有一些 ID 的 JSON 时:

"Ids":{
        "$id": "2",
        "$values": [
            212701000000005615
        ]
    }

receivedData 的数字右侧用零填充:

Example input:  212701000000005615
Example output: 212701000000005600

我已将其添加到 Swagger 配置中:

services.AddControllers().AddNewtonsoftJson(x=> { x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; x.SerializerSettings.FloatParseHandling = Newtonsoft.Json.FloatParseHandling.Double; });

获得 nugets - Newtonsoft.JSON 和 Microsoft.AspNetCore.Mvc.NewtonsoftJson。

为什么最后反序列化成那些00?我已经在两侧尝试了 decimal / double / float 但它不起作用。但是,如果我在客户端使用字符串,它会以某种方式起作用。我该怎么做才能对代码进行最少的更改并使其正常工作?

Swagger UI 使用 JavaScript 发送请求,而这些数字超出了 JavaScript 的数字范围,这就是它们四舍五入的原因。欲了解更多信息,请参阅:

您仍然可以使用其他客户端测试请求,例如curl。或者您特别需要 Swagger UI,一个可能的解决方法是将 Ids 的类型从 List<long> 更改为 List<string>.