Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=64652fb8-d482-42fe-bdb1-5521eac8fb0d

Cómo usar JSON en .NET fácilmente con C#

El formato JSON se ha convertido en los últimos años en uno de los más utilizados por los servicios web para proporcionar información a los desarrolladores. En este artículo te enseñamos cómo podemos utilizarlo en C# de manera sencilla.

JSON vs XML

Algunas ventajas por las cuales se ha popularizado mucho JSON frente a su principal formato competidor hasta el momento (XML) son:

  • El uso de una sintaxis más reducida, lo que implica intercambio de datos más pequeños
  • La facilidad para poder ser leído por una persona
  • La sencillez de su generación (y uso) utilizando tecnologías web

Buscando un proveedor de datos

Para intentar que el artículo te resulte lo más útil posible si necesitas conectar tu aplicación .NET a una API que devuelva JSON, vamos a realizar un ejemplo realista paso a paso.

Para ello hemos seleccionado la API Weathers como base para el ejemplo que veremos a continuación. Esta API, como su propio nombre indica, nos va a proporcionar información meteorológica de la ciudad que le indiquemos (Madrid en nuestro ejemplo).

El código para llamar a la API consiste en realizar una petición GET a la URL http://weathers.co/api.php?city=Madrid. Como resultado nos devuelve la siguiente información en formato JSON (en la figura la vemos desplegada):

Resultado de la API del tiempo mostrando la información de la ciudad de Madrid

Como podemos ver en la imagen anterior, nos informa de cuál es la temperatura en Madrid, la humedad y otros datos climatológicos.

Creando la clase Meteorología

Para tratar en C# el resultado anterior, estaremos de acuerdo en que lo mejor sería almacenar cada uno de los datos como una propiedad en una clase. En este caso he decidido llamar a la clase Meteorologia, pero esta clase no la vamos a crear nosotros a mano, sino que se creará de manera automática siguiendo estos pasos:

  1. Vamos a realizar una petición a la API, por ejemplo desde el navegador, para copiar la respuesta que nos da.
  2. Vamos a entrar en json2csharp y vamos a copiar la respuesta de la API.
  3. Le damos al botón de generar, para que nos cree la clase o clases necesarias para mapear cada uno de los campos del JSON, en propiedades de las clases.
  4. Copiamos el código de las clases resultantes en Visual Studio, teniendo en cuenta que renombraremos la clase RootObject, con el nombre que nosotros queramos usar, en este caso Meteorologia.
  5. Yo normalmente renombro las propiedades para que tengan la primera letra en mayúsculas, pero esto es una cuestión de estilo y no es obligatorio.

El código resultante de nuestras clases será, en este caso, el siguiente:

public class Meteorologia
{
    public string ApiVersion { get; set; }
    public Data Data { get; set; }
}

public class Data
{
    public string Location { get; set; }
    public string Temperature { get; set; }
    public string Skytext { get; set; }
    public string Humidity { get; set; }
    public string Wind { get; set; }
    public string Date { get; set; }
    public string Day { get; set; }
}

Realizando la petición y el parseo del JSON

El formato JSON está soportado de forma nativa por C#. Sin embargo, en este caso vamos a utilizar una biblioteca externa denominada JSON.Net. Ésta ofrece muchas ventajas frente a la nativa, como por ejemplo:

  • Es mucho más rápida en el procesado de ficheros JSON. Tanto es así que la propia Microsoft la utiliza en sus desarrollos.
  • Es muy sencilla de usar.
  • Permite serializar y deserializar cualquier objeto de .Net desde JSON y viceversa.

Para añadir esta biblioteca a nuestro proyecto, lo podemos hacer bajando el archivo desde su página o bien usando el administrador de paquetes de NuGet:

Instalando con el gestor de paquetes NuGet la biblioteca JSON.net

Finalmente realizamos la petición GET para recibir la información en JSON y usamos el método JsonConvert.DeserializeObject<>() para deserializar el JSON en nuestra clase, como se ve a continuación:

Meteorologia meteorologia;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"http://weathers.co/api.php?city=Madrid");
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
    var json = reader.ReadToEnd();
    meteorologia = JsonConvert.DeserializeObject<Meteorologia>(json);
}
Console.WriteLine("La temperatura en Madrid es: " + meteorologia.Data.Temperature);

Espero que este artículo te parezca interesante y te ayude a incorporar servicios web que utilizan JSON en tus desarrollos.

Jorge Durán

Jorge es Ingeniero Informático por la Universidad de Salamanca. Es un entusiasta de la tecnología desde los 10 años, y ha escrito decenas de artículos en blogs relacionados con la informática. Lo puedes seguir en sus blogs Lenguaje de programación y Somos Binarios.

Ver todos los posts de Jorge Durán

No te pierdas ningún post

Únete gratis a nuestro canal en Telegram y te avisaremos en el momento en el que publiquemos uno nuevo.

Archivado en: Trucos

La mejor formación online para desarrolladores como tú

Comentarios (11) -

Muchas gracias me salvaste la vida.... Saludos

Responder

Alberto García
Alberto García

Copia en el portapapeles el json, te vas a Visual Studio, menú  edit y pulsas sobre paste special dentro de una clase, te genera automáticamente el mapeo del json sin necesidad de salir del propio entorno
Saludos

Responder

Jose Herreros
Jose Herreros

Excelente tip para Visual Studio, muchas gracias

Responder

Parece que el servicio ya no está disponible.

Responder

Hola Alfredo:

En efecto, parece que el servicio del tiempo usado para el ejemplo está caído ahora mismo o ha desaparecido. Una pena. No obstante era solo un ejemplo concreto por ilustrar los conceptos del artículo, que sigue siendo válido. Gracias por avisar.

Saludos.

Responder

Una consulta porque usas var si estas en .NET C#?? a mi me tira error eso!

Responder

Hola Carlos:

var es una palabra normal y corriente de C# desde hace muchos años. Significa que le dejas al compilador determinar el tipo correcto de la variable sin necesidad de que se lo indiques tú. Si te da error es porque debes de estar compilando para una versión de .NET antiquísima-

Puedes ver la documentación sobre var aquí:

docs.microsoft.com/.../var

Saludos

Responder

Esteban Peralta Nuñez
Esteban Peralta Nuñez

muchas gracias, muy facil entender como funciona y como se trabaja, eres genial, gracias.

Responder

Gracias por la explicación, pero tengo una duda. ¿Se puede leer un JSON sin una clase en particular porque puede variar de etiqueta y contenido?

Responder

Hola Andrés:

Sí, es muy fácil de conseguir gracias a las maravillas de la palabra clave dynamic de C#.

Bastaría con hacer algo como esto (usando el objeto JObject de LINQ to JSON de la biblioteca que se comenta en el artículo):

dynamic o = JObject.Parse("Cadena de texto con el JSON que queremos parsear");

y luego para acceder a cualquier propiedad bastaría con usar su nombre directamente. Por ejemplo:

o.Data.Temperatura

Saludos.

Responder

Magnífico artículo. Me diste la solución. Millones de gracias.

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.