C# 动态JSON查询JSON.NET

C# 动态JSON查询JSON.NET,c#,json,linq,json.net,C#,Json,Linq,Json.net,我有一段JSON: { "grid": 4, "rows": [ { "label": "Full Width", "name": "FullWidth", "areas": [ { "grid": 16, "hasConfig": false,

我有一段JSON:

{ 
    "grid": 4, 
    "rows": [ 
        { 
            "label": "Full Width", 
            "name": "FullWidth", 
            "areas": [ 
                { 
                    "grid": 16, 
                    "hasConfig": false, 
                    "controls": [ 
                        { 
                            "value": "Test", 
                            "editor": { 
                                "name": "Headline", 
                                "alias": "headline", 
                                "view": "textstring", 
                                "render": null, 
                                "icon": "icon-coin", 
                                "config": { 
                                    "style": "font-size: 36px; line-height: 45px; font-weight: bold", 
                                    "markup": "<h1>#value#</h1>" 
                                } 
                            }, 
                            "active": false 
                        }, 
                        { 
                            "value": "Test", 
                            "editor": { 
                                "name": "Headline", 
                                "alias": "headline", 
                                "view": "textstring", 
                                "render": null, 
                                "icon": "icon-coin", 
                                "config": { 
                                    "style": "font-size: 36px; line-height: 45px; font-weight: bold", 
                                    "markup": "<h1>#value#</h1>" 
                                    } 
                            }, 
                            "active": false 
                        } 
                    ], 
                    "active": false 
                } 
            ], 
            "hasConfig": false, 
            "id": "e0f6ab79-f562-b86b-f32b-d5520173f0cb", 
            "active": false 
        } 
    ] 
}
{
“网格”:4,
“行”:[
{ 
“标签”:“全宽”,
“名称”:“全宽”,
“地区”:[
{ 
“网格”:16,
“hasConfig”:false,
“控制措施”:[
{ 
“值”:“测试”,
“编辑”:{
“名称”:“标题”,
“别名”:“标题”,
“视图”:“文本字符串”,
“呈现”:空,
“图标”:“图标硬币”,
“配置”:{
“风格”:“字体大小:36px;行高:45px;字体重量:粗体”,
“标记”:“#值#”
} 
}, 
“活动”:错误
}, 
{ 
“值”:“测试”,
“编辑”:{
“名称”:“标题”,
“别名”:“标题”,
“视图”:“文本字符串”,
“呈现”:空,
“图标”:“图标硬币”,
“配置”:{
“风格”:“字体大小:36px;行高:45px;字体重量:粗体”,
“标记”:“#值#”
} 
}, 
“活动”:错误
} 
], 
“活动”:错误
} 
], 
“hasConfig”:false,
“id”:“e0f6ab79-f562-b86b-f32b-d5520173f0cb”,
“活动”:错误
} 
] 
}
我想知道是否有任何行(可以是多行)具有任何控件(计数>0)。我不需要知道任何字段中包含的内容,只要任何行的控制计数大于0,那么只需知道true或false。我一直在尝试使用LINQ查询来实现这一点,但进展并不快


这个JSON是动态的,所以我不能反序列化它。任何帮助都将不胜感激!:)

您可以这样做:

string json = @"{ 
    'grid': 4, 
    'rows': [ 
        { 
            'label': 'Full Width', 
            'name': 'FullWidth', 
            'areas': [ 
                { 
                    'grid': 16, 
                    'hasConfig': false, 
                     'controls': [ 
                        { 
                            'value': 'Test', 
                            'editor': { 
                                'name': 'Headline', 
                                'alias': 'headline', 
                                'view': 'textstring', 
                                'render': null, 
                                'icon': 'icon-coin', 
                                'config': { 
                                    'style': 'font-size: 36px; line-height: 45px; font-weight: bold', 
                                    'markup': '<h1>#value#</h1>' 
                                } 
                            }, 
                            'active': false 
                        }, 
                        { 
                            'value': 'Test', 
                            'editor': { 
                                'name': 'Headline', 
                                'alias': 'headline', 
                                'view': 'textstring', 
                                'render': null, 
                                'icon': 'icon-coin', 
                                'config': { 
                                    'style': 'font-size: 36px; line-height: 45px; font-weight: bold', 
                                    'markup': '<h1>#value#</h1>' 
                                    } 
                            }, 
                            'active': false 
                        } 
                    ],
                    'active': false 
                } 
            ], 
            'hasConfig': false, 
            'id': 'e0f6ab79-f562-b86b-f32b-d5520173f0cb', 
            'active': false 
        } 
    ] 
}";

var jobject = JObject.Parse(json);

var test = jobject
    .Descendants()
    .Where(t => t.Type == JTokenType.Property && ((JProperty)t).Name == "controls" 
            && t.Ancestors()
                .Any(a => a.Type == JTokenType.Property && ((JProperty)a).Name == "rows"))
    .Any();
stringjson=@{
“网格”:4,
“行”:[
{ 
“标签”:“全宽”,
'name':'FullWidth',
“地区”:[
{ 
“网格”:16,
'hasConfig':false,
“控件”:[
{ 
“值”:“测试”,
'编辑':{
“名称”:“标题”,
“别名”:“标题”,
“视图”:“文本字符串”,
“呈现”:null,
“图标”:“图标硬币”,
'配置':{
'style':'font size:36px;lineheight:45px;font-weight:bold',
“标记”:“值”
} 
}, 
“活动”:false
}, 
{ 
“值”:“测试”,
'编辑':{
“名称”:“标题”,
“别名”:“标题”,
“视图”:“文本字符串”,
“呈现”:null,
“图标”:“图标硬币”,
'配置':{
'style':'font size:36px;lineheight:45px;font-weight:bold',
“标记”:“值”
} 
}, 
“活动”:false
} 
],
“活动”:false
} 
], 
'hasConfig':false,
“id”:“e0f6ab79-f562-b86b-f32b-d5520173f0cb”,
“活动”:false
} 
] 
}";
var jobject=jobject.Parse(json);
var测试=jobject
.后代()
.Where(t=>t.Type==JTokenType.Property&((JProperty)t).Name==“控件”
&&t.祖先()
.Any(a=>a.Type==JTokenType.Property&((JProperty)a.Name==“行”))
.Any();

将其解析为一个
作业对象
,查找名为
子体
“控件”
,该子体有一个名为
的父(祖先)
“行”<代码>测试如果是,则显示为真;如果不是,则显示为假

您可以这样做:

string json = @"{ 
    'grid': 4, 
    'rows': [ 
        { 
            'label': 'Full Width', 
            'name': 'FullWidth', 
            'areas': [ 
                { 
                    'grid': 16, 
                    'hasConfig': false, 
                     'controls': [ 
                        { 
                            'value': 'Test', 
                            'editor': { 
                                'name': 'Headline', 
                                'alias': 'headline', 
                                'view': 'textstring', 
                                'render': null, 
                                'icon': 'icon-coin', 
                                'config': { 
                                    'style': 'font-size: 36px; line-height: 45px; font-weight: bold', 
                                    'markup': '<h1>#value#</h1>' 
                                } 
                            }, 
                            'active': false 
                        }, 
                        { 
                            'value': 'Test', 
                            'editor': { 
                                'name': 'Headline', 
                                'alias': 'headline', 
                                'view': 'textstring', 
                                'render': null, 
                                'icon': 'icon-coin', 
                                'config': { 
                                    'style': 'font-size: 36px; line-height: 45px; font-weight: bold', 
                                    'markup': '<h1>#value#</h1>' 
                                    } 
                            }, 
                            'active': false 
                        } 
                    ],
                    'active': false 
                } 
            ], 
            'hasConfig': false, 
            'id': 'e0f6ab79-f562-b86b-f32b-d5520173f0cb', 
            'active': false 
        } 
    ] 
}";

var jobject = JObject.Parse(json);

var test = jobject
    .Descendants()
    .Where(t => t.Type == JTokenType.Property && ((JProperty)t).Name == "controls" 
            && t.Ancestors()
                .Any(a => a.Type == JTokenType.Property && ((JProperty)a).Name == "rows"))
    .Any();
stringjson=@{
“网格”:4,
“行”:[
{ 
“标签”:“全宽”,
'name':'FullWidth',
“地区”:[
{ 
“网格”:16,
'hasConfig':false,
“控件”:[
{ 
“值”:“测试”,
'编辑':{
“名称”:“标题”,
“别名”:“标题”,
“视图”:“文本字符串”,
“呈现”:null,
“图标”:“图标硬币”,
'配置':{
'style':'font size:36px;lineheight:45px;font-weight:bold',
“标记”:“值”
} 
}, 
“活动”:false