Newtonsoft Json 在 C# 中获取 jqGrid ajax Json 字符串的嵌套数组

Get jqGrid ajax Nested Array of Json string in C# by Newtonsoft Json

我正在尝试解析 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#.

我没有成功获取 filters->rules[0]->data

我试过的:

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

出现错误:'Newtonsoft.Json.Linq.JValue' 不包含 'rules' 的定义。

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'.

如何在 filters->rules AND filters->rules[0]->data 中获取值?

我不了解 C#,但我在 JavaScript

上尝试过

在您的 json 中,过滤器字段不正确 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)

是returns

"{"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)

现在它returns 统治对象

您必须像这样解析内部对象:

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();