我想创建一个向我展示特定硬币价值的应用程序。我使用KuCoin 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];
}
所以我需要一本字典或类似的东西才能放在?点。
答案 0 :(得分:1)
如果您使用字典声明var content = $('#YOURID .edit_web_ac').data('id);
类,则JsonConvert将自动反序列化为该字典。
FiatPrices
然后您可以反序列化和查询
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>>
答案 1 :(得分:0)
您可以使用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());