2017-04-13 2 views
1

J'essaie d'analyser la chaîne JSON et de collecter des valeurs de tableau présents à l'intérieur.Get jqGrid Ajax tableau de hiérarchie imbriqué de Json en C# par 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#.

Je ne reçois pas le succès sur l'obtention filtres-> règles [0] -> Données

Ce que j'ai essayé:

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

erreur: 'Newtonsoft.Json.Linq.JValue' ne contient pas de définition de 'règles'.

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

Comment obtenir une valeur à l'intérieur filtres-> règles ET filtres-> règles [0] -> données?

+0

Êtes-vous sûr que 'postData' a un type de chaîne et donc 'JObject.Parse (postData)' est requis? Si vous avez vraiment besoin de faire 'JObject.Parse (postData)' alors vous devez toujours faire ** second ** parsing 'filtres dynamiques = JObject.Parse (jObj.filters);' au lieu de 'var filters = jObj.filters; ' – Oleg

+0

Merci Oleg! :) –

+0

Vous êtes les bienvenus! – Oleg

Répondre

1

Vous devez analyser l'objet interne comme celui-ci:

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

C'est merveilleux. Merci beaucoup! –

+0

Je suis content que cela ait aidé. Bonne journée ! –

1

Je n'ai pas les connaissances sur C#, mais je l'ai essayé en JavaScript sur

Dans votre JSON, dans les filtres champ ne JSON is'nt approprié, il est une chaîne

je faire sur javascript pourrait-il vous aidera est

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) 

est le rendement

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

et il est une chaîne maintenant je suis à nouveau en parse sur JSON

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

maintenant il renvoie des règles objets

+0

La chaîne JSON provient de jqGrid, je ne fais aucune modification avec la chaîne avant de l'envoyer en C#. Donc, le format de chaîne devrait être correct. Quelles sont les erreurs dans le domaine du filtre? Champ de filtre que je suis capable d'obtenir (comme je l'ai dit dans le sujet principal). En fait, je ne suis pas en mesure d'obtenir le champ "règles". –