web-dev-qa-db-fra.com

Puis-je LINQ un JSON?

Voici le JSON que j'obtiens d'une demande 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 je voudrais attraper le champ "url", en utilisant (peut-être?) LINQ. J'en demande beaucoup car cela, un peu différent. Je ne vais donc pas créer une classe C # et la désérialiser à chaque fois.

Est-ce un moyen d'extraire un seul champ? Merci!

53
markzzz

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;

Documentation: LINQ to JSON

82
I4V

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

Vous pouvez donc 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

4
Parv Sharma

Dans une liaison, vous pouvez toujours désérialiser le JSON et le sérialiser en XML et charger le XML dans un XDocument. Ensuite, vous pouvez utiliser le classique Linq to XML. Lorsque vous avez terminé, prenez le XML, désérialisez-le et sérialisez-le en JSON en JSON. Nous avons utilisé cette technique pour ajouter la prise en charge JSON à une application initialement conçue pour XML, elle a permis à des modifications proches de zéro d'être opérationnelles.

0