【发布时间】:2022-01-26 10:00:44
【问题描述】:
我有一个小型 API,其中 POST 请求,但 List 中的一个字段被错误地反序列化。
我正在上课:
用于向 API 发送一些数据的类(只是长型客户端应用程序的 ID 列表):
public class PostDTO
{
public List Ids { get; set; }
}
API 项目中另一个在服务器上运行的类:
public class RequestDTO
{
public List Ids { get; set; }
}
现在是控制器中的主要方法:
[HttpPost("v2/{testNumber}")]public async Task 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?我在两边都试过十进制/双精度/浮点数,但它不起作用。但是,如果我在客户端使用字符串,它会以某种方式起作用。我可以做些什么来实现对代码的最小更改并使其正常工作?
-
无法 reproduce 使用 Newtonsoft 本身的错误。
-
这可能是一件大摇大摆的事情。但是当我将输入列表的类型更改为字符串时,它工作正常。
-
看起来,当它从 swagger 网站发布时,它会导致问题,当从移动应用程序运行时,它工作正常。