我需要呼叫一個 API,它回傳一個可以變化的 JSON。有時回應可能類似于:
[
{
"name": "value"
}
]
而其他時候
[
{
"property": "value"
}
]
甚至
[
{
"name": "value",
"status": "value",
"count": "value"
}
]
基本上,我需要檢索此 JSON 中的所有值以備后用。
我試過了
var prova = JsonConvert.DeserializeObject<dynamic>(result);,但我無法使用 ["indexName"] 訪問屬性,因為索引可能會因某些因素而異。有任何想法嗎?
uj5u.com熱心網友回復:
如果它們是有限的,您可以創建一個具有所有可能屬性的 POCO。像下面這樣:
public class Result {
public string name { get; set; }
public string property { get; set; }
public string status { get; set; }
public string count{ get; set; }
}
然后你可以使用:var prova = JsonConvert.DeserializeObject<IEnumerable<Result>>(Result);。我將反序列化更改為使用 IEnumerable,因為我看到您的 JSON 是一個陣列。
然后您可以在訪問它們之前檢查這些值是否為空。因為每個 Result 物件都只有在 JSON 中可用的非空屬性。
或者,您可以使用 Dictionary<string, string> 或 Dictionary<string, int> 并執行以下操作:
var prova = JsonSerializer.Deserialize<IEnumerable<Dictionary<string, string>>>(result) as List<Dictionary<string, string>>;
然后您可以訪問串列中的每個物件并像這樣訪問您想要的屬性或 TryGetValue 方法以提高安全性。
Console.WriteLine(prova[0]["name"]);
uj5u.com熱心網友回復:
假設:
您正在array從 api獲取一個物件(不回傳null資料 -回復:可能為什么結構是“動態的”)。
這是一種方法:
//System.Text.Json
var foo = JsonSerializer.Deserialize<JsonElement>(array_from_api);
//It's an array (assumption) of one or more objects
foreach (JsonElement element in foo.EnumerateArray())
{
//iterate through each object's properties
foreach (JsonProperty o in element.EnumerateObject())
{
//Assumption: value isn't a nested object/array, otherwise adjust...
Console.WriteLine($"{o.Name} = {o.Value}");
}
}
注意:如果結構更復雜 - 更多嵌套,您將必須進行一些檢查并進行相應調整(重新:嵌套陣列、物件等)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324334.html
下一篇:將自定義型別序列化為JSON
