在 C# 中,c#,json,dictionary"/>

首页 > 解决方案 > 转换列表到一个字典在 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];
}

所以我需要一本字典或类似的东西在??字典??点。

标签: c#jsondictionary

解决方案


如果你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;

推荐阅读