C# 如何根据JObject中的子属性值选择父属性值

C# 如何根据JObject中的子属性值选择父属性值,c#,json,json.net,C#,Json,Json.net,我从API调用中获取json数据,需要从数据中读取特定值 以下是json的简化版本: { "Modules":[ { "ModuleId":370, "Title":"Getting Oriented", "Modules":[ { "ModuleId":378, "Title":"Artifacts",

我从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();
var-topicIds=jo.subjects()
第()类
.Where(p=>p.Name==“TopicId”&&
p、 值!=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();
}
foreach(topicId中的变量topicId)
{
var moduleId=jo.degenantsandself()
第()类
.Where(p=>p.Value==topicId.Value)
.Select(p=>p.Parent)
.ToString();
}

我只需要“TopicId”父项的“ModuleId”值,因为您已经有了
TopicId
属性,所以只需在循环中从那里向上导航即可获得相应的
ModuleId
值:

var moduleId = (string)topicId.Parent.Parent.Parent.Parent["ModuleId"];

Fiddle:

您期望的输出是什么?