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 的数字范围,这就是它们四舍五入的原因。欲了解更多信息,请参阅:
- Large numbers erroneously rounded in JavaScript
- Swagger UI incorrect display of type: integer format: int64 as rounded int values in response body
您仍然可以使用其他客户端测试请求,例如curl
。或者您特别需要 Swagger UI,一个可能的解决方法是将 Ids
的类型从 List<long>
更改为 List<string>
.
我有一个小的 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 的数字范围,这就是它们四舍五入的原因。欲了解更多信息,请参阅:
- Large numbers erroneously rounded in JavaScript
- Swagger UI incorrect display of type: integer format: int64 as rounded int values in response body
您仍然可以使用其他客户端测试请求,例如curl
。或者您特别需要 Swagger UI,一个可能的解决方法是将 Ids
的类型从 List<long>
更改为 List<string>
.