57 votes

Puis-je LINQ un JSON?

Voici le JSON que je reçois d'une requête sur .NET:

 {
  "id": "110355660738", 
  "picture": {
    "data": {
      "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/1027085_12033235063_5234302342947_n.jpg", 
      "is_silhouette": false
    }
  }
}
 

et j'aimerais attraper le champ "url", en utilisant (peut-être?) LINQ. Je fais beaucoup de demande comme celle-ci, qui diffère un peu. Je ne vais donc pas créer une classe C # et la désérialiser à chaque fois.

Est-ce une façon d'extraire un seul champ? Je vous remercie!

85voto

I4V Points 23648

Pas besoin de Linq, utilisez simplement dynamic (en utilisant Json.Net )

 dynamic obj = JObject.Parse(json);
Console.WriteLine((string)obj.picture.data.url);
 

La version de Linq ne serait pas très lisible

 JObject jObj = JObject.Parse(json);
var url = (string)jObj.Descendants()
                    .OfType<JProperty>()
                    .Where(p => p.Name == "url")
                    .First()
                    .Value;
 

5voto

Parv Sharma Points 7070

Je ne recommanderais pas LINQ. Je recommanderais une bibliothèque JSON telle que newtonsoft.json.

Donc, vous pouvez faire ceci:

 string json = @"{
  ""Name"": ""Apple"",
  ""Expiry"": "2008-12-28T00:00:00",
  ""Price"": 3.99,
  ""Sizes"": [
    ""Small"",
    ""Medium"",
    ""Large""
  ]
}";

JObject o = JObject.Parse(json);

string name = (string)o["Name"];

// Apple
JArray sizes = (JArray)o["Sizes"];
string smallest = (string)sizes[0];

// Small
 

Remarque: - Ce code a été copié à partir des exemples présents sur le site du projet http://james.newtonking.com/pages/json-net.aspx.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X