![](/img/trans.png)
[英]Convert the string containing array and dict into the list and vice versa in c#
[英]Convert List<objects> to a Dict <String, String> in C#
我想創建一個應用程序來顯示某種硬幣的價值。 我使用庫幣 API。 當我請求定價信息時,我收到以下回復:
{
"code": "200000",
"data_fiat": {
"LOKI": "0.39646657",
"EXY": "0.01427250",
"IOTX": "0.00411990",
"MHC": "0.0035",
"MXW": "0.14063173",
...
}
}
我使用 Deserialze 和 Foreach 循環將其轉換為 data_fiat 對象列表。 現在,當我想獲得一個值時,我只需鍵入 data_fiat.LOKI。
問題是我需要為每個可能的硬幣(200+)及其難看的代碼創建一個 IF。 有沒有辦法以某種方式將其轉換為字典,以便我可以使用 data_fiatDict[VAR]?
這就是我現在所擁有的:
public static async Task<List<data_fiat>> GetPrices()
{
FiatPrices data = new FiatPrices();
List<data_fiat> price = new List<data_fiat>();
string url = $"https://api.kucoin.com/api/v1/prices";
using (HttpClient client = GetHttpClient())
{
try
{
string json = await client.GetStringAsync(url);
data = JsonConvert.DeserializeObject<FiatPrices>(json);
foreach (data_fiat item in data.price)
{
price.Add(item);
}
}
catch (Exception ex)
{
throw ex;
}
}
return price;
}
這將返回 data_fiat 的列表
private async Task GenerateData(Coins Selection)
{
Coindata.BindingContext = Selection;
String CoinSelection = Selection.Name;
pricelbl.Text = ??Dictionary??[CoinSelection];
}
所以我需要一本字典或類似的東西在??字典?? 點。
如果您使用字典聲明FiatPrices
類,JsonConvert 將自動反序列化到該字典中。
public class FiatPrices
{
[JsonProperty("code")]
public int Code { get; set; }
[JsonProperty("data_fiat")]
public Dictionary<string, decimal> Prices { get; set; }
}
然后你可以反序列化和查詢
FiatPrices data = JsonConvert.DeserializeObject<FiatPrices>(json);
decimal price = data.Prices["IOTX"];
如果你只需要字典,你可以用一個單一的分配來提取它(不需要循環):
Dictionary<string, decimal> priceDict = data.Prices;
或在您的GetPrices
方法中使用經過調整的返回類型Task<Dictionary<string, decimal>>
:
return data.Prices;
您可以使用JObject
並選擇所需的節點,然后將其反序列化為Dictionary<string,string>
。
所以不要這樣做:
data = JsonConvert.DeserializeObject<FiatPrices>(json);
foreach (data_fiat item in data.price)
{
price.Add(item);
}
你可以這樣做:
JObject jObj = JObject.Parse(json);
var data_dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(jObj["data_fiat"].ToString());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.