serializar newtonsoft deserialize deserializar convert c# .net json linq linq-to-json

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