Json se está convirtiendo en un estandar para el intercambio de información en la web y en aplicaciones de escritorio / moviles. Si necesitamos coger datos de algún webservice que nos proporcione los mismos en Json necesitaremos decodificarlos para poder usarlos en nuestra aplicación. Para ello hemos hecho uso de Json.Net de Newtonsoft. Podéis descargar la librería desde aquí.
Lo primero que tendremos que hacer es añadir la librería a las Referencias de nuestro proyecto. En el Explorador de nuestro proyecto, en referencias, le damos a buscar y ponemos nuestra librería. Esta se añadirá a nuestro proyecto.
Tras esto ya podemos empezar a escribir código. Yo he hecho un proyecto de consola (por simplicidad) que saca el titulo y el contenido de un post de un blog, a través del servicio jsonplaceholder, que nos proporciona una completa API Rest con contenido falso para nuestras pruebas. Así, en nuestro caso, pido el contenido de http://jsonplaceholder.typicode.com/posts/2 y me devuelve la siguiente información:
{
"userId": 1,
"id": 2,
"title": "qui est esse",
"body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
}
Bueno, empezamos ya con nuestro código. De primeras me he creado una nueva clase, Post, a la que he sobreescrito el método toString() para que saque el título y el contenido del post. La clase quedará de la siguiente manera:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Post
{
private int userid;
private int id;
private string title;
private string body;
public Post(int userid, int id, string title, string body)
{
this.userid = userid;
this.id = id;
this.title = title;
this.body = body;
}
public int getUserId()
{
return this.userid;
}
public void setUserId(int userid)
{
this.userid = userid;
}
public int getId()
{
return this.id;
}
public void setId(int id)
{
this.id = id;
}
public override string ToString()
{
return "El titulo del post es: " + this.title + "\ny el contenido del post es: " + this.body;
}
}
}
Como podéis ver, el código es sencillo de entender y no tiene ninguna complicación. Ahora vamos al programa principal. Como digo, es en consola para hacerlo más fácil y rápido. En un windows form o aplicación seguiríamos usando el mismo código. Este queda de la siguiente forma:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
//Añado la librería para su uso
using Newtonsoft.Json;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//Creamos un nuevo WebClient para obtener el Json.
WebClient webClient = new WebClient();
//Obtenemos el Json
string result = webClient.DownloadString("http://jsonplaceholder.typicode.com/posts/2");
//Escribo el Json por pantalla para verlo
Console.WriteLine(result);
//Creo un objeto Post y le asigno los datos del Json
Post p = JsonConvert.DeserializeObject<Post>(result);
//Escribo el objeto Post por pantalla con el método sobreescrito.
Console.WriteLine(p.ToString());
Console.ReadLine();
}
}
}
Todo lo "complicado" está en la línea Post p = JsonConvert.DeserializeObject<Post>(result);, que crea un objeto Post usando la librería que decodifica el Json, creando el objeto que le indicamos con los datos que tenemos.
Con esto podemos usar cualquier dato en Json para nuestras aplicaciónes de escritorio con C#.