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