簡體   English   中英

C# Newtonsoft JSON:反序列化並跳過 object 名稱

[英]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(通過反序列化)添加到您想要的列表中。

  1. obj[item.Name].ToString()為您提供每個 AE、AR、BC 等的內部字符串
  2. JsonConvert.Deserialize將該字符串轉換為您的余額 class
  3. 將 object 添加到列表中,無論您想用它做什么。

您的天平問題 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.

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