2017-04-13 49 views
1

我想解析Json字符串并收集其中存在的数组值。获取jqGrid ajax在C#中嵌套JSON字符串的数组由Newtonsoft Json

{"_search":true,"nd":1492064211841,"rows":30,"page":1,"sidx":"","sord":"asc","filters":"{\"groupOp\":\"OR\",\"rules\":[{\"field\":\"Emp_ID\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Name\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Designation\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"City\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"State\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Country\",\"op\":\"cn\",\"data\":\"ASAS\"}]}"} 

PS: Above string is coming from jqGrid Ajax to the WebMethod in C#.

我不是在得到越来越成功过滤器 - >规则[0] - >数据

我已经试过:

dynamic jObj = JObject.Parse(postData); 
var data = jObj.filters.rules[0].data; 

出现错误:“Newtonsoft.Json.Linq.JValue”不包含“规则”的定义。

dynamic jObj = JObject.Parse(postData); 
var filters = jObj.filters; //Sucess: getting filters here 
var rules1 = filters["rules"]; //Error: 'Newtonsoft.Json.Linq.JValue' does not contain a definition for 'rules'. 
var rules2 = filters.rules; //Error: 'Newtonsoft.Json.Linq.JValue' does not contain a definition for 'rules'. 

如何获得内部值过滤器 - >规则过滤器 - >规则[0] - >数据

+0

你肯定'postData'有字符串类型,因此'JObject.Parse(postData)'是必需的?如果你真的需要制作'JObject.Parse(postData)',那么你仍然需要**秒解析'动态过滤器= JObject.Parse(jObj.filters);'而不是'var filters = jObj.filters; ' – Oleg

+0

谢谢奥列格! :) –

+0

不客气! – Oleg

回答

1

必须解析内部对象是这样的:

var obj = "{\"_search\":true,\"nd\":1492064211841,\"rows\":30,\"page\":1,\"sidx\":\"\",\"sord\":\"asc\",\"filters\":\"{\\\"groupOp\\\":\\\"OR\\\",\\\"rules\\\":[{\\\"field\\\":\\\"Emp_ID\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"},{\\\"field\\\":\\\"Name\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"},{\\\"field\\\":\\\"Designation\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"},{\\\"field\\\":\\\"City\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"},{\\\"field\\\":\\\"State\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"},{\\\"field\\\":\\\"Country\\\",\\\"op\\\":\\\"cn\\\",\\\"data\\\":\\\"ASAS\\\"}]}\"}"; 
dynamic jObj = JObject.Parse(obj); 
var data = JObject.Parse(jObj.filters.Value); 
var test = data.rules; 
Console.WriteLine(data); 
Console.ReadLine(); 
+0

太棒了。非常感谢! –

+0

我很高兴帮助。祝你有美好的一天 ! –

1

我没有关于C#的知识,但我试图把它的JavaScript

在你的JSON,在过滤器领域不正确is'nt JSON是字符串

我有这样做JavaScript或许它会帮助你的

var a = {"_search":true,"nd":1492064211841,"rows":30,"page":1,"sidx":"","sord":"asc","filters":"{\"groupOp\":\"OR\",\"rules\":[{\"field\":\"Emp_ID\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Name\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Designation\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"City\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"State\",\"op\":\"cn\",\"data\":\"ASAS\"},{\"field\":\"Country\",\"op\":\"cn\",\"data\":\"ASAS\"}]}"} 

console.log(a.filters) 

是回报

"{"groupOp":"OR","rules":[{"field":"Emp_ID","op":"cn","data":"ASAS"},{"field":"Name","op":"cn","data":"ASAS"},{"field":"Designation","op":"cn","data":"ASAS"} 

,它是字符串现在我再次解析成它JSON

b = JSON.parse(a.filters) 
console.log(b.rules) 

现在它返回规则对象

+0

JSON字符串来自jqGrid,我没有做任何修改与字符串发送到C#之前。所以字符串格式应该是正确的。过滤器字段中有哪些错误?过滤器字段我能够得到(正如我在主要话题中所说的)。其实我无法获得“规则”字段。 –