我有这条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
}
]
}
我想知道是否有任何行(可能是多行)有任何控件(Count&gt; 0)。我不需要知道任何字段中包含的内容,只要任何行的控制计数为&gt; 0 - 所以只是真或假。我一直在尝试使用LINQ查询实现这一点,但没有快速到达!
这个JSON是动态的,所以我无法反序列化它。任何帮助将不胜感激! :)
答案 0 :(得分:2)
使用@dbc给出的链接结束 - 这是我的代码:
JObject sideBar = JObject.Parse(sidebarContentCol.ToString());
IEnumerable<JToken> sidebarControls = sideBar.SelectTokens("$.rows[*].areas[*].controls[*]");
var controls = (bool)(sidebarControls.Count() == 0);
答案 1 :(得分:0)
你可以这样做:
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();
将其解析为JObject
,查找名为Descendant
的{{1}},其父级(祖先)名为"controls"
。如果是,"rows"
将成立,如果不是,则为假。