Introducción al trabajo con JSON en C#
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos ampliamente utilizado en desarrollo web, archivos de configuración y API. Si estás comenzando a aprender C# y .NET, saber trabajar con JSON es una habilidad obligatoria. En este artículo, analizaremos cómo realizar el análisis de JSON (conversión de una cadena a un objeto) y la serialización (conversión de un objeto a una cadena JSON) utilizando las herramientas integradas de .NET y la popular biblioteca Newtonsoft.Json.
Veremos ejemplos prácticos que te ayudarán a dominar rápidamente los conceptos clave. Todo el código está escrito en C# (.NET 6+), pero funcionará en versiones anteriores con cambios mínimos.
1. Trabajo integrado con JSON: espacio de nombres System.Text.Json
A partir de .NET Core 3.0, Microsoft presentó el espacio de nombres de alto rendimiento System.Text.Json. Está integrado en la plataforma y no requiere instalar paquetes adicionales. Es la herramienta principal para trabajar con JSON en aplicaciones .NET modernas.
1.1 Serialización de un objeto a JSON
La serialización es el proceso de convertir un objeto de C# en una cadena JSON. Consideremos una clase simple Person:
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
// Usovar person = new Person{ Name = "Iván Ivanov", Age = 30, Email = "ivan@example.com"};
string json = System.Text.Json.JsonSerializer.Serialize(person);Console.WriteLine(json);Resultado de la ejecución:
{"Name":"Iván Ivanov","Age":30,"Email":"ivan@example.com"}Por defecto, las propiedades se serializan con nombres que coinciden con los nombres de las propiedades en C#. Puedes configurar el formato usando JsonSerializerOptions, por ejemplo, para hacer el JSON más legible:
var options = new System.Text.Json.JsonSerializerOptions{ WriteIndented = true};
string prettyJson = JsonSerializer.Serialize(person, options);Console.WriteLine(prettyJson);Ahora la salida tendrá sangría:
{ "Name": "Iván Ivanov", "Age": 30, "Email": "ivan@example.com"}1.2 Deserialización (análisis) de JSON a un objeto
El proceso inverso, convertir una cadena JSON en un objeto de C#, se llama deserialización. Usa el método JsonSerializer.Deserialize<T>():
string jsonString = @"{""Name"":""María Petrova"",""Age"":25,""Email"":""maria@example.com""}";
Person? person = System.Text.Json.JsonSerializer.Deserialize<Person>(jsonString);
if (person != null){ Console.WriteLine($"Nombre: {person.Name}, Edad: {person.Age}");}Importante: si el JSON no coincide con la estructura de la clase, se lanzará una excepción JsonException. Para un trabajo seguro, usa manejo de excepciones o verifica si es null.
1.3 Trabajo con JsonDocument para JSON arbitrario
A veces la estructura del JSON no se conoce de antemano o quieres leer datos sin crear clases. Para esto, usa JsonDocument:
string jsonText = @"{""product"":""Portátil"",""price"":75000,""inStock"":true}";
using JsonDocument doc = JsonDocument.Parse(jsonText);JsonElement root = doc.RootElement;
string product = root.GetProperty("product").GetString();int price = root.GetProperty("price").GetInt32();bool inStock = root.GetProperty("inStock").GetBoolean();
Console.WriteLine($"{product}: {price} rub. (disponible: {inStock})");JsonDocument implementa IDisposable, por lo que debes usar using para liberar recursos.
2. Biblioteca clásica Newtonsoft.Json (Json.NET)
Antes de la aparición de System.Text.