c# - 转换列表到一个字典在 C# 中
问题描述
我想创建一个应用程序来显示某个硬币的价值。我使用 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];
}
所以我需要一本字典或类似的东西在??字典??点。
解决方案
如果你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;
推荐阅读
- python - 如何在没有中间点的情况下查看所有 DataFrame 列和数据?
- gitlab - Gitlab 代码质量:报告在哪里?
- android - 在双android中将逗号更改为句点
- python - 如何合并或重新映射具有相同名称的列?
- format - 边界细化后的分割评估不起作用
- java - MiBand 2 - 从接收到的字节中解析步骤
- css - 悬停时如何仅影响其他链接
- hyperledger-fabric - Hyperledger Explorer 配置错误
- docker - 在构建过程中在 docker 中编译模块失败,但在交互运行时成功
- git - git rebase 导致文件中的控制字符