2011-04-01 6 views
0

Je n'arrive pas à écrire correctement la syntaxe LINQ. Je l'ai déjà utilisé mais jamais dans un fichier JSON. J'ai créé le code suivant en cherchant et en expérimentant des exemples trouvés ici et d'autres sites. Je pense que je suis proche, mais n'arrive pas à comprendre. J'utilise vs2010 C# ciblant .net 4 avec des références à Newtonsoft.Json et Newtonsoft.Json.Linq.LINQ - JSON Aide requise

Je dois être en mesure d'obtenir le fichier from.number et le corps à partir de ce fichier.

{ "message": { "à": { "num": "7891234567", "name": "Jane Doe" }, "corps": "Bonjour", « de « : { "num": "1231234567", "name": "John Doe" }, "type": 0, "dateTime": 1301493974000 } }

 var jObj = JObject.Parse(jFile); 

     var pNum = from msg in jObj["message"]["from"].Children()      
        select (string)msg; 

     foreach(var n in pNum) 
     { 
      Console.WriteLine(n); 
     } 

L'un Le code bove imprime les valeurs from.num et les valeurs from.name. Je cherche juste la valeur num, pas les deux. Je ne suis pas sûr de savoir comment isoler la valeur que je veux.

J'ai essayé ......

 select (string)msg["num"]; 

Sans succès. Je reçois une erreur "Impossible d'accéder à la valeur enfant sur Newtonsoft.Json.Linq.JProperty." J'ai aussi besoin d'une requête pour obtenir la valeur du corps.

Merci, Jeff

Répondre

2

Cela devrait fonctionner:

string json = "{ \"message\": { \"to\": { \"num\": \"7891234567\", \"name\": \"Jane Doe\" }, \"body\": \"Hello\", \"from\": { \"num\": \"1231234567\", \"name\": \"John Doe\" }, \"type\": 0, \"dateTime\": 1301493974000 } }"; 

JavaScriptSerializer js = new JavaScriptSerializer(); 
dynamic foo = js.Deserialize<dynamic>(json); 
var message = new {Num = foo["message"]["from"]["num"], Body = foo["message"]["body"]}; 

Console.WriteLine("{0}: {1}", message.Num, message.Body); 
Console.ReadLine(); 

Pour référence ultérieure, je aurais dû ajouter que la JavaScriptSerializer est dans l'assemblée System.Web.Extensions.

+1

Je ne peux pas ajouter la référence pour JavaScriptSerializer. Je cible le Framework .Net 4 (pas client) donc je suis à la recherche de cette réponse. Merci pour votre idée. Je vais tester dès que possible. – Jkulp

+0

Fonctionne parfaitement grâce! – Jkulp

0

Ne pas la configuration d'essayer moi-même, en regardant la documentation que je suis venu avec cela. Pouvez-vous essayer et voir si ce qui suit fonctionne?

var pNum = from msg in jObj["message"]["from"] 
       select (string)msg.SelectToken("num"); 
+0

Lorsque j'imprime pNum, j'obtiens deux valeurs nulles. – Jkulp