gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:50:39 24 4
gpt4 key购买 nike

我有一个小型 API,其中一个请求被发布,但是列表中的一个字段被错误地反序列化。

我有类(class):

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

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

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

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

现在是 Controller 中的主要方法:

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

{

}

我正在使用 Swagger UI 测试这个东西。当我在列表中发布带有一些 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> .

关于c# - WEB .NET 5 Newtonsoft 中的序列化 - 最后 2 位数字反序列化不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70495458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com