我有一個小的 API,在其中發布了一個請求,但是 List 中的一個欄位反序列化不正確。
我有課:
一個用于向 API 發送一些資料的類(只是一個長型別的 ID 串列,客戶端應用程式):
public class PostDTO
{
public List<long> Ids { get; set; }
}
在服務器上運行的 API 專案中的另一個類:
public class RequestDTO
{
public List<long> Ids { get; set; }
}
現在控制器中的主要方法:
[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?我在兩邊都試過十進制/雙精度/浮點數,但它不起作用。但是如果我在客戶端使用字串,它會以某種方式作業。我該怎么做才能對代碼進行最少的更改并使其正常作業?
uj5u.com熱心網友回復:
Swagger UI 使用 JavaScript 發送請求,而這些數字超出了 JavaScript 的數字范圍,這就是它們被四舍五入的原因。有關更多資訊,請參閱:
- 在 JavaScript 中錯誤地四舍五入的大數
- Swagger UI 錯誤顯示型別:整數格式:int64 作為回應正文中的舍入整數值
您仍然可以使用另一個客戶端測驗請求,例如curl. 或者您特別需要 Swagger UI,一種可能的解決方法是將Idsfrom的型別更改List<long>為List<string>.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/394909.html
標籤:C# json 。网 asp.net核心 招摇的用户界面
