C# 使用LINQ获取嵌套JSON/JTOKEN中的值

C# 使用LINQ获取嵌套JSON/JTOKEN中的值,c#,json,linq,jsonparser,C#,Json,Linq,Jsonparser,我不熟悉LINQ查询,想知道我试图通过LINQ查询实现的目标是否可行 因此,我有一个JSON文档,如下所示 我正在尝试获取与“$type”匹配的所有值,并返回目录路径和$type的值 我知道这样做的一种互动方式,但似乎LINQ更受欢迎,而且应该很容易得到 { "$type":"type1", "title":"US version", "_object1":[ { "$type":"type2", "rootModule":{

我不熟悉
LINQ
查询,想知道我试图通过
LINQ
查询实现的目标是否可行

因此,我有一个JSON文档,如下所示

我正在尝试获取与“$type”匹配的所有值,并返回目录路径和$type的值

我知道这样做的一种互动方式,但似乎LINQ更受欢迎,而且应该很容易得到

{
   "$type":"type1",
   "title":"US version",
   "_object1":[
      {
         "$type":"type2",
         "rootModule":{
            "id":"page",
            "modules":[
               {
                  "id":"header",
                  "$type":"module-header"
               },
               {
                  "id":"footer",
                  "$type":"module-footer"
               }
            ]
         }
      },
      {
         "$type":"type2",
         "_id":"ab134"
      },
      {
         "$type":"type3",
         "_id":"ab567"
      }
   ],
   "_object2":[
      {
         "$type":"module1",
         "constraintsId":"page"
      },
      {
         "name":"header1 1",
         "nestedobject":{
            "$type":"nestedobject-type",
            "dataBinder":{
               "id":"ab244"
            }
         }
      }
   ]
}
谢谢各位

我可以得到如下列表:

    var root = (JContainer)JToken.FromObject(document, CommonSerializerSetting.GetCommonSerializer());
    var descendant = "$type";
    var query = root

        // Recursively descend the JSON hierarchy
        .DescendantsAndSelf()

        // Select all properties named descendant
        .OfType<JProperty>()
        .Where(p => p.Name == descendant)

        // Select their value
        .Select(p => p.Value);
var root=(JContainer)JToken.FromObject(文档,CommonSerializerSetting.GetCommonSerializer());
变量后代=“$type”;
var query=root
//递归地降低JSON层次结构
.后代和自我()
//选择名为“子体”的所有属性
第()类
.Where(p=>p.Name==后代)
//选择它们的值
.选择(p=>p.Value);

我正在尝试获取所有值
我们能看到那部分吗?嗨@puropoix,我需要JSON中的所有值,其键为“$type”。这就解释了吗?你是说这样的事吗。也可以使用JSONPath查询,请参见或。