Trabajo con JSON en C#: análisis y serialización en la práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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ía

Observe 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); // Olga

Newtonsoft.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