我正在从API调用中获取json数据,并且需要从数据中读取特定值。
以下是json的简化版本:
{
"Modules":[
{
"ModuleId":370,
"Title":"Getting Oriented",
"Modules":[
{
"ModuleId":378,
"Title":"Artifacts",
"Modules":[
],
"Topics":[
{
"TopicId":379
},
{
"TopicId":380
},
{
"TopicId":381
}
]
}
],
"Topics":[
{
"TopicId":371
},
{
"TopicId":372
},
{
"TopicId":373
}
]
},
{
"ModuleId":389,
"Title":"Build Your Solution",
"Modules":[
{
"ModuleId":390,
"Title":"Core Platform Configuration",
"Modules":[
{
"ModuleId":392,
"Title":"Artifacts",
"Topics":[
{
"TopicId":393
}
]
}
],
"Topics":[
{
"TopicId":391
}
]
}
]
}
]
}
我将其转换为JObject并使用以下代码获取所有TopicId。
var topicIds = jo.Descendants()
.OfType<JProperty>()
.Where(p => p.Name == "TopicId" &&
p.Value != null)
.ToList();
从那里,我需要TopicId的父级的ModuleId值。
我尝试了以下操作,但它返回了父级的所有子级。
foreach (var topicId in topicIds)
{
var moduleId = jo.DescendantsAndSelf()
.OfType<JProperty>()
.Where(p => p.Value == topicId.Value)
.Select(p => p.Parent)
.ToString();
}
我只希望来自“ TopicId”父对象的“ ModuleId”值
答案 0 :(得分:1)
您已经拥有topicId
属性,因此只需在循环内从那里向上导航即可获得相应的moduleId
值:
var moduleId = (string)topicId.Parent.Parent.Parent.Parent["ModuleId"];