簡體   English   中英

如何使用僅包含數字的字符串返回 JSON

[英]How do I return JSON with strings that contain only numbers

我有一個 .NET 應用程序,它調用 API 並將響應內容反序列化為 MyClass 具有的列表

class MyClass
{
    public int id {get; set; }
    public string name {get; set; }
    public float score {get; set; }
}

使用

return await response.Content.ReadFromJsonAsync<List<MyClass>>();

我有一個用 PHP 編寫的 API,它從 MySQL 數據庫中讀取數據並返回它們,如下所示:

$response = new Response(json_encode($resultArray, JSON_NUMERIC_CHECK));

現在,如果我不使用 JSON_NUMERIC_CHECK,JSON 中的所有值都會作為字符串返回,例如:

[ 
{"id":"1","name":"test","score":"3.4"},
{"id":"2","name":"1999","score":"4.8"} 
]

因此反序列化失敗,因為它無法將字符串轉換為 int 或 float。

但是,如果我確實使用 JSON_NUMERIC_CHECK,上面的示例如下所示:

[
{"id":1,"name":"test","score":3.4},
{"id":2,"name":1999,"score":4.8}
]

該名稱僅包含數字,因此數字檢查已將其轉換為 int,因此反序列化失敗,因為它無法將 int 轉換為字符串。

有沒有我錯過的正確方法? 我想避免任何黑客攻擊,比如在名稱中返回額外的文本,以強制它成為一個字符串。

我正在使用 PHP 7 和 .NET 6

非常感謝

您將必須知道哪些項目不是字符串,並決定您想要它們的類型。 在這個例子中id將是一個int並且score將是一個float

array_walk($resultArray, function(&$v) { 
                             $v['id']    = (int)$v['id'];
                             $v['score'] = (float)$v['score']; 
                         });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM