在C#中将List <objects>转换为Dict <String,String>

时间:2019-12-01 21:49:26

标签: c# json dictionary

我想创建一个向我展示特定硬币价值的应用程序。我使用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];
}

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

2 个答案:

答案 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());