[英]C# Newtonsoft JSON: deserialize & skip object name
我有看起來像這樣的 JSON 數據:
{"AE":{"amount":"0.00000000","value":"0.00000000"},
"AR":{"amount":"0.00000000","value":"0.00000000"},
"BC":{"amount":"0.09670332","value":"3.74814004"}}
還有一個看起來像這樣的 class:
internal class Balance {
internal float amount;
internal float value;
}
我正在嘗試閱讀它:
private static List<Balance> Balances = new List<Balances>();
Balances = JsonConvert.DeserializeObject<List<Balance>>(json);
...但我對對象的名稱(AE、AR、BC 等)並不感興趣。 我應該如何反序列化輸入以丟棄這些名稱或將它們填充到某個地方?
您可以解析 json 並遍歷父屬性。 取余額並忽略屬性名稱。
var obj = JObject.Parse(json);
List<Balance> balances = new List<Balance>();
foreach (var item in obj.Properties())
balances.Add(JsonConvert.DeserializeObject<Balance>(obj[item.Name].ToString()));
本質上,您將 json 放在父屬性(AE、AR、BC)下,並將 Balance object(通過反序列化)添加到您想要的列表中。
obj[item.Name].ToString()
為您提供每個 AE、AR、BC 等的內部字符串JsonConvert.Deserialize
將該字符串轉換為您的余額 class您的天平問題 Class
我注意到的另一件事是,您沒有使用getter and setter
。 如果沒有 getter 和 setter,您將無法獲得任何值。
此外,命名約定規定變量名稱以大寫字母開頭。 您可以使用 JsonProperty 定義 json 中的名稱。
internal class Balance
{
[JsonProperty("amount")]
public float Amount { get; set; }
[JsonProperty("value")]
public float Value { get; set; }
}
您的json包含Dictionary<string, Balance>
。
如果您只想提取所有值,請使用以下命令:
Balances = JsonConvert.DeserializeObject<Dictionary<string, Balance>>(json).Values.ToList();
這將反序列化為Dictionary<string, Balance>
,然后獲取List<Balance>
與您正在尋找的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.