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

C#中从JSON提取指定值:如何获取Info中的Id?

解决Newtonsoft.Json中"cannot access child value on JProperty"错误的思路

你碰到的这个报错,本质是你的JSON结构和代码里的访问逻辑不匹配,咱们一步步来修正:

先明确问题根源

你提供的JSON结构是这样的:

{"5aa891cd1e1422452e8b4567": { "info": { "id": "5aa891" } }}

这里根本没有events这个字段,但你代码里却试图访问jsonDATA["events"]——这是第一个错误。另外,当你直接遍历JObject的元素时,拿到的是JProperty类型(它代表JSON里的键值对整体),直接用e["info"]去访问子属性自然会报错,因为JProperty不是一个可直接访问子节点的对象。

正确的解决代码

情况1:遍历所有顶级对象(如果有多个匹配项)

用Properties()方法遍历JObject的键值对,先获取JProperty的Value(也就是对应的对象),再访问子属性:

var jsonDATA = JObject.Parse(data);
foreach (var prop in jsonDATA.Properties())
{
    // prop.Name 就是顶级的ID字符串:"5aa891cd1e1422452e8b4567"
    var eventObject = prop.Value;
    var targetId = eventObject["info"]["id"].ToString();
    // 这里就可以拿到你要的info里的id了
}

情况2:确定只有一个匹配项

如果你的JSON里只会有这一个顶级对象,也可以不用遍历,直接取第一个值:

var jsonDATA = JObject.Parse(data);
var singleEvent = jsonDATA.Values().First();
var targetId = singleEvent["info"]["id"].ToString();

额外说明

JProperty是Newtonsoft.Json里用来表示JSON键值对的类型,它包含Name(键)和Value(对应的值)两个部分。你之前直接对JProperty调用["info"],相当于试图在键值对这个整体上找子节点,这不符合它的结构,所以才会抛出那个错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:21