无法将类型“Newtonsoft.Json.Linq.JProperty”转换为“Newtonsoft.Json.Linq.JObject”

raz*_*zki 5 c# linq serialization json json.net

目前正在尝试使用 fixer.io API 在 C# 中创建货币转换。

我在从 Twitter API 解析 JSON 时使用了与下面类似的方法,并且没有任何问题,我不完全确定这里发生了什么。

从 API 返回的 JSON 示例:

 {
    "base": "EUR",
    "date": "2016-05-05",
    "rates": {
        "AUD": 1.5266,
        "BGN": 1.9558,
        "BRL": 4.0282,
        "CAD": 1.4665,
        "CHF": 1.1018,
        "CNY": 7.441,
        "CZK": 27.028,
        "DKK": 7.4401,
        "GBP": 0.7886,
        "HKD": 8.8775,
        "HRK": 7.515,
        "HUF": 312.84,
        "IDR": 15260.95,
        "ILS": 4.3221,
        "INR": 76.0745,
        "JPY": 122.51,
        "KRW": 1333.95,
        "MXN": 20.2155,
        "MYR": 4.5819,
        "NOK": 9.2985,
        "NZD": 1.6577,
        "PHP": 54.171,
        "PLN": 4.4234,
        "RON": 4.5035,
        "RUB": 75.0559,
        "SEK": 9.2575,
        "SGD": 1.5531,
        "THB": 40.191,
        "TRY": 3.3166,
        "USD": 1.1439,
        "ZAR": 17.0751
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我当前正在使用的代码:

        List<string> exchangeRate = new List<string>();
        string BSE = "USD";
        string URL = "http://api.fixer.io/latest?base=" + BSE;

        using (var webClient = new System.Net.WebClient())
        {
            var json = webClient.DownloadString(URL);
            dynamic stuff = JsonConvert.DeserializeObject(json);

            foreach (JObject item in stuff)
            {
                exchangeRate.Add(item["rates"].ToString());

                foreach (var rates in exchangeRate)
                {
                    Console.WriteLine(rates);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

现在我收到的错误是:

无法将类型“Newtonsoft.Json.Linq.JProperty”转换为“Newtonsoft.Json.Linq.JObject”

这发生在“JObject 项”处

Bri*_*ers 4

在您的代码中,JsonConvert.DeserializeObject()正在将 a 返回JObject到动态变量 中stuff。当您用于foreach迭代 a时JObject,枚举的项始终是JProperty实例,而不是JObject实例。由于JProperty不是 的子类JObject,因此您不能将其分配给JObject变量,这就是您收到此错误的原因。

如果您只是想将所有货币汇率打印到控制台,您可以这样做:

JObject stuff = JObject.Parse(json);

foreach (JProperty rate in stuff["rates"])
{
    Console.WriteLine(rate.Name + ": " + rate.Value);
}
Run Code Online (Sandbox Code Playgroud)

小提琴: https: //dotnetfiddle.net/fpS9CM