c# - newtonsoft - ¿Puedo LINQ un JSON?
json to dto c# (3)
Este es el JSON que obtengo de una solicitud en .NET:
{
"id": "110355660738",
"picture": {
"data": {
"url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/1027085_12033235063_5234302342947_n.jpg",
"is_silhouette": false
}
}
}
y me gustaría atrapar el campo "url", usando (¿quizás?) LINQ. Hago muchas peticiones como esta, eso difiere un poco. Entonces no crearé una clase C # y la deserializaré siempre.
¿Es una forma de extraer un solo campo? ¡Gracias!
En un enlace, siempre se puede deserializar el JSON y serializarlo en XML, y cargar el XML en un XDocument. Entonces puedes usar el clásico Linq para XML. Cuando hayas terminado, toma el XML, deserialízalo y serialízalo de nuevo a JSON en JSON. Usamos esta técnica para agregar soporte JSON a una aplicación que originalmente fue desarrollada para XML, permitió que las modificaciones cercanas a cero se pusieran en marcha.
No es necesario para Linq, solo use dynamic
(usando Json.Net )
dynamic obj = JObject.Parse(json);
Console.WriteLine((string)obj.picture.data.url);
La versión de Linq no sería muy legible
JObject jObj = JObject.Parse(json);
var url = (string)jObj.Descendants()
.OfType<JProperty>()
.Where(p => p.Name == "url")
.First()
.Value;
Documentación: LINQ to JSON
No recomendaría LINQ. Recomendaría una biblioteca JSON como newtonsoft.json.
Entonces puedes hacer esto:
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
Nota: - este código ha sido copiado de los ejemplos presentes en el sitio del proyecto http://james.newtonking.com/pages/json-net.aspx