Qué es JSON, sus tipos y comparación con XML, serialización en .NET y consumo de servicios web.
JSON (JavaScript Object Notation) es un formato de texto sencillo para el intercambio de datos.
Fácil de leer y escribir para personas, y simple de interpretar y generar para las máquinas.
Nació de JavaScript, pero hoy es un formato de texto independiente de cualquier lenguaje de programación.
A los '90 surgió el problema de que máquinas con distintos SO y lenguajes se entendieran. La primera solución fue XML.
Con gran volumen de datos, el procesamiento se volvía lento y los archivos pesados.
Creado por Douglas Crockford. Reduce el tamaño de los archivos y los datos a transmitir; se volvió un estándar.
El formato de intercambio por defecto de la mayoría de las APIs web.
Intercambio de datos entre el navegador y el servidor sin recargar la página.
Archivos de config, persistencia y mensajería entre servicios.
{
"departamento": 8,
"nombredepto": "Ventas",
"director": "Juan Rodríguez",
"empleados": [
{ "nombre": "Pedro", "apellido": "Fernández" },
{ "nombre": "José", "apellido": "Macome" }
]
}
Pares "nombre": valor entre llaves; listas entre corchetes; se puede anidar.
Enteros o con parte fraccional; admiten negativos. 30, -1.5
Entre comillas dobles, con escapes. "Hola"
true / false
El valor nulo. null
Lista ordenada entre corchetes. ["a","b"]
Pares nombre:valor entre llaves.
{
"actor": [
{ "id": "01",
"name": "Tom",
"lastname": "Hanks" },
{ "id": "02",
"name": "Nick",
"lastname": "Thameson" }
]
}
<root> <actor> <id>01</id> <name>Tom</name> <lastname>Hanks</lastname> </actor> </root>
JSON suele ser más compacto y rápido de procesar para grandes volúmenes.
Serializar es convertir un objeto en una secuencia de bytes o texto que lo representa; deserializar es el camino inverso.
Una instancia en memoria.
objeto → cadena JSON.
← Deserializar: JSON → objeto.
Texto que se guarda o transmite.
Guardar el estado de un objeto en archivos o bases de datos.
Enviar datos entre sistemas o componentes.
Crear una copia exacta de un objeto.
Enviar objetos a través de sistemas de mensajería.
Incorporado en el propio SDK: no necesita instalar nada. Moderno y de alto rendimiento.
recomendadoLibrería externa (se obtiene por NuGet). Muy usada históricamente, con muchas funciones.
externa (NuGet)En la clase usamos System.Text.Json.
| Tipo | Para qué |
|---|---|
JsonSerializer | Serializa objetos .NET a JSON y deserializa JSON a objetos. El más usado. |
JsonDocument | Examinar la estructura de un documento JSON. |
JsonElement | Representa un valor específico dentro de un documento JSON. |
Utf8JsonWriter / Utf8JsonReader | API de alto rendimiento para escribir/leer JSON UTF-8 token a token. |
using System.Text.Json; public class Producto { public string Nombre { get; set; } public int Precio { get; set; } } Producto papas = new Producto { Nombre = "Papas Fritas", Precio = 30 }; string json = JsonSerializer.Serialize(papas); Console.WriteLine(json);
JsonSerializer.Serialize.{"Nombre":"Papas Fritas","Precio":30}using System.Text.Json; string json = "{\"Nombre\":\"Papas Fritas\",\"Precio\":30}"; Producto p = JsonSerializer.Deserialize<Producto>(json); Console.WriteLine( $"Nombre: {p.Nombre}, Precio: {p.Precio}");
JsonSerializer.Deserialize<T>.Si los nombres no coinciden exacto, se usan opciones (PropertyNameCaseInsensitive).
Una aplicación que interactúa con otras a través de la web usando estándares y protocolos abiertos, permitiendo que apps en distintos lenguajes y plataformas se comuniquen.
Conectar sistemas dentro o entre organizaciones.
Comunicación entre apps web y móviles.
Procesos de negocio entre servicios.
Microservicios y APIs flexibles.
Funcionalidades y datos desde cualquier lugar.
Funciona con el ciclo solicitud–respuesta: el cliente pide algo, el servidor responde.
La clase de .NET para enviar solicitudes HTTP (GET, POST, …) a un servidor.
Operaciones async: no bloquea el hilo principal.
Encabezados, timeout, autenticación, cookies.
Conviene reusar una sola instancia en toda la app.
JSON, XML, archivos, formularios.
private static readonly HttpClient client = new HttpClient(); private static async Task GetClima() { var url = "https://ws.smn.gob.ar/map_items/weather/"; HttpResponseMessage response = await client.GetAsync(url); response.EnsureSuccessStatusCode(); // 2xx o lanza excepción string body = await response.Content.ReadAsStringAsync(); List<Root> clima = JsonSerializer.Deserialize<List<Root>>(body); foreach (var prov in clima) Console.WriteLine($"{prov.name}: {prov.weather.temp}"); }
async / await. Pedimos el JSON, lo leemos como texto y lo deserializamos a objetos C#.JSON es texto para intercambiar datos; con JsonSerializer pasás de objeto a JSON y viceversa, y con HttpClient consumís servicios web que devuelven JSON.
System.Text.Json — docs de .NETHttpClient — docs de .NET