crear-y-leer-ficheros-json-facilmente-en-c-con-jsonnet

Crear y leer ficheros Json fácilmente en C# con JsonNET

En esta entrada vamos a ver cómo trabajar fácil y eficientemente con ficheros Json en un programa con C# gracias a la librería Newtownsoft Json.NET.

No hay duda que el formato Json se ha convertido en uno de los estándares para el intercambio de datos estructurados en entre servicios Web multiplataforma.

El formato Json presenta algunas ventajas frente a sus competidores (como xml), como un menor tamaño de archivo, ser más fácil de entender por una persona, o una generación y procesado más rápido.

Aunque habitualmente asociamos los ficheros Json con Javascript, los principales lenguajes de programación disponen de librerías para trabajar con ficheros Json de forma cómoda.

Por supuesto, C# no es una excepción. El framework .NET soporta Json de forma nativa desde la versión 4.0. Pero su uso es aún más sencillo y eficiente gracias a la popular librería Open Source Json.NET, cuyo código está disponible en https://github.com/JamesNK/Newtonsoft.Json.

Usar la librería Json.NET

Añadir la librería Json.NET a nuestro programa es sencillo ya que está disponible como un paquete Nutget. Simplemente tenemos que añadirlo a través del gestor de paquetes y estaremos listos para trabajar.

jsonnet-nutget

Vamos a ver brevemente el uso de Json.NET. Para ello, creamos un objeto que tenga la estructura del Json con el que queremos trabajar.

public class Product
{
  public string Name { get; set; }
  public DateTime ExpiryDate { get; set; }
  public decimal Price { get; set; }
  public string[] Sizes { get; set; }
}

Serializar Json

Para realizar la serialización simplemente tendremos que llamar a la función SerializeObject.

var product = new Product
{
  Name = "Apple",
  ExpiryDate = new DateTime(2008, 12, 28),
  Price = 3.99M,
  Sizes = new[] {"Small", "Medium", "Large"}
};      

string json = JsonConvert.SerializeObject(product);

Ahora con este string podemos hacer lo que necesitemos como, por ejemplo, guardarlo a un fichero.

string path = @"c:\product.json";
System.IO.File.WriteAllText(path, json);

O enviarlo por una petición HTTP.

var request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = "POST"; 
request.ContentType = "application/xml; charset=utf-8"; 
request.Timeout = 30000; 

string json = JsonConvert.SerializeObject(product);
byte[] byteArray = Encoding.UTF8.GetBytes(json);
request.ContentLength = byteArray.Length;

var dataStream = new StreamWriter(request.GetRequestStream()); 
dataStream.Write(byteArray); 
dataStream.Close();

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
  dataStream = response.GetResponseStream ();    
  using (Stream stream = response.GetResponseStream())
  {
    using (StreamReader reader = new StreamReader(stream))
    {
      string responseFromServer = reader.ReadToEnd ();
    }
  }
}

Deserializar Json

Parsear un fichero Json es igualmente sencillo gracias a la función DeserializeObject,

Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);

Por supuesto, el string lo podemos obtener de cualquiera forma disponible. Por ejemplo, leerlo desde un fichero existen.

string path = @"c:\product.json";
using (StreamReader jsonStream = File.OpenText(path))
{
    var json = jsonStream.ReadToEnd();
    Product product = JsonConvert.DeserializeObject<Product>(json);
}

O como respuesta de a través de una petición Http

string url = @"http://www.direccionUrlDeTuJson.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
    var json = reader.ReadToEnd();
    Product product = JsonConvert.DeserializeObject<Product>(json);
}

Estos son solo algunas de las muchas funciones disponibles en Json.NET. Para más información consultar los ejemplos disponibles en la página web de la librería.

Como vemos, Json.NET convierte en trivial trabajar con ficheros Json en C#. Sin duda una librería de referencia en .NET, y una herramienta a añadir a nuestra lista de favoritos.