Introducción
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en el estándar de facto para la comunicación entre servidor y cliente, así como para el almacenamiento de configuraciones. En el ecosistema de C# (.NET), el trabajo con JSON está implementado al más alto nivel: el desarrollador tiene acceso tanto a bibliotecas integradas como a potentes soluciones de terceros. En este artículo, con ejemplos prácticos, analizaremos cómo realizar el análisis, la serialización y la deserialización de JSON en C# utilizando enfoques modernos.
Veremos dos herramientas principales: System.Text.Json (biblioteca integrada desde .NET Core 3.0+) y Newtonsoft.Json (popular biblioteca de terceros). Aprenderá a convertir objetos de C# a JSON y viceversa, a trabajar con estructuras anidadas y a manejar errores.
Fundamentos de serialización y deserialización en C#
Antes de profundizar en el código, definamos los términos. Serialización es el proceso de convertir un objeto de C# (por ejemplo, una instancia de una clase) en una cadena JSON. Deserialización es el proceso inverso: a partir de una cadena JSON reconstruimos un objeto de C#. En C# se utilizan atributos y clases serializadoras especiales para esto.
1. Trabajo con System.Text.Json (biblioteca integrada)
A partir de .NET Core 3.0, Microsoft presentó su propia biblioteca para trabajar con JSON: System.Text.Json. Es más rápida que Newtonsoft.Json y no requiere la instalación de paquetes adicionales.
Consideremos una clase simple Person:
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}Serialización a JSON:
using System.Text.Json;
var person = new Person{ Name = "Alexéi", Age = 30, Email = "alex@example.com"};
string json = JsonSerializer.Serialize(person);Console.WriteLine(json);// Salida: {"Name":"Alexéi","Age":30,"Email":"alex@example.com"}Deserialización desde JSON:
string jsonString = @"{""Name"":""María"",""Age"":25,""Email"":""maria@example.com""}";Person? person = JsonSerializer.Deserialize<Person>(jsonString);Console.WriteLine(person?.Name); // MaríaObserve el operador ? (nullable) — la deserialización puede devolver null en caso de error.
2. Trabajo con Newtonsoft.Json (Json.NET)
A pesar de la aparición de System.Text.Json, Newtonsoft.Json sigue siendo una opción popular debido a su flexibilidad y amplias capacidades de configuración. Para usarlo, instale el paquete NuGet Newtonsoft.Json.
Ejemplo con la misma clase Person:
using Newtonsoft.Json;
// Serializaciónvar person = new Person { Name = "Iván", Age = 35, Email = "ivan@example.com" };string json = JsonConvert.SerializeObject(person);Console.WriteLine(json);
// Deserializaciónstring jsonInput = @"{'Name':'Olga','Age':28,'Email':'olga@example.com'}";Person? personDeserialized = JsonConvert.DeserializeObject<Person>(jsonInput);Console.WriteLine(personDeserialized?.Name); // OlgaNewtonsoft.Json admite por defecto tanto comillas dobles como simples, lo que lo hace más tolerante con JSON "sucio".
Escenarios avanzados: trabajo con objetos anidados y colecciones
En proyectos reales, el JSON rara vez es plano. Consideremos un ejemplo con datos anidados.
Supongamos que tenemos una clase Company que contiene una lista de empleados:
public class Employee{ public string Name { get; set; } public string Position { get; set; }}
public class Company{ public string CompanyName { get; set; } public List<Employee> Employees { get; set; }}Serialización (System.Text.Json):
Blogs
Book Recommendations
Leer también
Hackathon en Kotlin: cómo ganar y no agotarse
Cómo escribir una API REST en C# en 30 minutos: guía paso a paso
Docker y JavaScript: contenerización de aplicaciones Node.js (nivel avanzado)
Imprimiendo arrays en Java: de principiante a experto
Desarrollador de C++: salarios, perspectivas y futuro en 2025