Saltar al contenido

Deserializar JSON a un objeto .NET usando Newtonsoft (¿o LINQ to JSON tal vez?)

Solución:

Puede usar el C # dynamic escriba para facilitar las cosas. Esta técnica también simplifica la refactorización, ya que no se basa en cuerdas mágicas.

JSON

La cadena JSON a continuación es una respuesta simple de una llamada a la API HTTP y define dos propiedades: Id y Name.

{"Id": 1, "Name": "biofractal"}

C#

Usar JsonConvert.DeserializeObject<dynamic>() para deserializar esta cadena en un tipo dinámico, simplemente acceda a sus propiedades de la forma habitual.

dynamic results = JsonConvert.DeserializeObject<dynamic>(json);
var id = results.Id;
var name= results.Name;

Si especifica el tipo de results variable como dynamic, en lugar de usar el var palabra clave, entonces los valores de propiedad se deserializarán correctamente, por ejemplo Id a una int y no un JValue (gracias a GFoley83 por el comentario a continuación).

Nota: El enlace NuGet para el ensamblado de Newtonsoft es http://nuget.org/packages/newtonsoft.json.

Paquete: También puede agregar el paquete con el instalador en vivo de nuget, con su proyecto abierto, simplemente busque el paquete y luego instálelo, instale, desinstale, actualice, simplemente se agregará a su proyecto en Dependencias / NuGet

Si solo necesita obtener algunos elementos del objeto JSON, usaría LINQ to JSON de Json.NET JObject clase. Por ejemplo:

JToken token = JObject.Parse(stringFullOfJson);

int page = (int)token.SelectToken("page");
int totalPages = (int)token.SelectToken("total_pages");

Me gusta este enfoque porque no es necesario deserializar completamente el objeto JSON. Esto es útil con las API que a veces pueden sorprenderle con propiedades de objetos faltantes, como Twitter.

Documentación: Serializar y deserializar JSON con Json.NET y LINQ a JSON con Json.NET

Con el dynamic palabra clave, resulta muy fácil analizar cualquier objeto de este tipo:

dynamic x = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);
var page = x.page;
var total_pages = x.total_pages
var albums = x.albums;
foreach(var album in albums)
{
    var albumName = album.name;

    // Access album data;
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *