You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Newtonsoft.Json循环遍历报错但绝对路径取值正常该如何解决

错误原因

你调用JObject.Parse解析后,ratesjson["Valute"]对应的是一个JObject类型的对象,直接遍历这个对象得到的每个元素是JProperty实例(每个JProperty的Key是AUD、USD这类货币编码,Value才是包含CharCode、Value等字段的货币信息对象)。你直接用x["CharCode"]访问JProperty的子节点,自然就抛出Cannot access child value on Newtonsoft.Json.Linq.JProperty异常。
而你用绝对路径ratesjson["Valute"]["AUD"]["CharCode"]访问的时候,实际上是跳过了遍历JProperty的步骤,直接通过Key取到了对应JProperty的Value,所以可以正常取值。

修复方案

两种修改方式任选即可:

方式1:遍历Valute下的所有JObject值

直接通过Values<JObject>()取到所有货币信息对象再遍历,修改你的foreach代码:

foreach (var x in ratesjson["Valute"].Values<JObject>())
{
    CurrencyRateMap crm = new CurrencyRateMap {
        CurrencyCode = (string)x["CharCode"],
        CurrencyRate = (double)x["Value"]
    };
    list.Add(crm);
}

方式2:遍历JProperty后显式取Value

把遍历的变量显式声明为JProperty,再取Value属性作为操作对象:

foreach (JProperty prop in ratesjson["Valute"])
{
    var x = (JObject)prop.Value;
    CurrencyRateMap crm = new CurrencyRateMap {
        CurrencyCode = (string)x["CharCode"],
        CurrencyRate = (double)x["Value"]
    };
    list.Add(crm);
}
额外优化建议
  • 不要每次请求都new HttpClient,会导致端口占用问题,建议全局复用单例HttpClient实例
  • 取值时可以用Newtonsoft提供的泛型Value<T>()方法代替强转,类型兼容性更好,例如x.Value<double>("Value")

内容的提问来源于stack exchange,提问作者Pavel Polushin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:57:04