Trabajo con JSON en C#: análisis y serialización para principiantes

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 al trabajo con JSON en C#

\n\n

JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos ampliamente utilizado en desarrollo web, aplicaciones móviles y microservicios. Para un desarrollador de C#, saber trabajar con JSON es una habilidad obligatoria. En este artículo, analizaremos los fundamentos del análisis (deserialización) y la serialización de JSON utilizando el espacio de nombres moderno System.Text.Json, que forma parte de .NET Core 3.0 y versiones superiores, así como de .NET 5/6/7/8.

\n\n

Veremos:

\n
    \n
  • Qué es la serialización y la deserialización
  • \n
  • Cómo convertir un objeto de C# en una cadena JSON
  • \n
  • Cómo leer JSON y convertirlo de nuevo en un objeto
  • \n
  • Trabajo con objetos anidados y colecciones
  • \n
  • Manejo de errores y configuración de la serialización
  • \n
\n\n

Todos los ejemplos de código están escritos para una aplicación de consola en C# (.NET 6+). Podrás copiarlos y ejecutarlos inmediatamente.

\n\n

1. Fundamentos de la serialización: objeto → JSON

\n\n

Serialización es el proceso de convertir un objeto (o estructura de datos) en una cadena en formato JSON. En C#, se utiliza la clase JsonSerializer del espacio de nombres System.Text.Json.

\n\n

Creando un modelo simple

\n\n

Supongamos que tenemos la clase Person:

\n\n
public class Person\n{\n    public string Name { get; set; }\n    public int Age { get; set; }\n    public string Email { get; set; }\n}
\n\n

Serialización del objeto

\n\n

Ahora creemos una instancia y la convertimos a JSON:

\n\n
using System.Text.Json;\n\nPerson person = new Person\n{\n    Name = "Iván Petrov",\n    Age = 30,\n    Email = "ivan@example.com"\n};\n\nstring jsonString = JsonSerializer.Serialize(person);\nConsole.WriteLine(jsonString);
\n\n

Resultado:

\n\n
{"Name":"Iván Petrov","Age":30,"Email":"ivan@example.com"}
\n\n

Por defecto, JsonSerializer usa camelCase para los nombres de las propiedades (primera letra en minúscula), pero en nuestro ejemplo los nombres se mantuvieron con mayúscula inicial porque no cambiamos la configuración. Si necesitas un camelCase estricto, usa JsonSerializerOptions:

\n\n
var options = new JsonSerializerOptions\n{\n    PropertyNamingPolicy = JsonNamingPolicy.CamelCase\n};\nstring jsonCamelCase = JsonSerializer.Serialize(person, options);\nConsole.WriteLine(jsonCamelCase);\n// {"name":"Iván Petrov","age":30,"email":"ivan@example.com"}
\n\n

2. Deserialización: JSON → objeto

\n\n

Deserialización es el proceso inverso: tomamos una cadena JSON y la convertimos en un objeto de C#.

\n\n

Ejemplo simple de deserialización

\n\n

Supongamos que recibimos un JSON de una API:

\n\n
string jsonFromApi = @"{""Name"":""Ana Smirnova"",""Age"":25,""Email"":""anna@test.com""}";\n\nPerson? personFromJson = JsonSerializer.Deserialize<Person>(jsonFromApi);\n\nif (personFromJson != null)\n{\n    Console.WriteLine($"Nombre: {personFromJson.Name}, Edad: {personFromJson.Age}");\n}
\n\n

Observa el signo ? después del tipo Person — es una anotación nullable que indica que el resultado puede ser null (por ejemplo, si el JSON es incorrecto).

\n\n

Trabajo con arreglos y listas

\n\n

A menudo, el JSON contiene colecciones de objetos. Supongamos que tenemos un arreglo de usuarios:

\n\n
string jsonArray = @"\n[\n    {""Name"":""Oleg"",""Age"":35},\n    {""Name"":""María"",""Age"":28},\n    {""Name"":""Dmitri"",""Age"":42}\n]";\n\nList<Person>? people = JsonSerializer.Deserialize<List<Person>>(jsonArray);\n\nif (people != null)\n{\n    foreach (var p in people)\n    {\n        Console.WriteLine($"{p.Name} - {p.Age} años");\n    }\n}
\n\n

3. Trabajo con objetos anidados y estructuras complejas

\n\n

Los datos JSON reales rara vez son planos. Consideremos

Blogs

Book Recommendations