Introducción al trabajo con JSON en C#
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en el estándar para la comunicación entre servicios web, archivos de configuración y API. En el ecosistema de C# (.NET), trabajar con JSON es una de las tareas básicas que enfrenta todo desarrollador. En este artículo, analizaremos en detalle cómo realizar el análisis (deserialización) y la serialización de datos en C#, utilizando tanto la biblioteca integrada System.Text.Json como la popular biblioteca de terceros Newtonsoft.Json.
Aprenderá cómo convertir objetos de C# a cadenas JSON y viceversa, cómo trabajar con estructuras anidadas, así como qué dificultades pueden surgir en la práctica. El material será útil tanto para principiantes como para desarrolladores experimentados que deseen sistematizar sus conocimientos.
Serialización de objetos C# a JSON
La serialización es el proceso de convertir un objeto de C# (u otra estructura de datos) en una cadena en formato JSON. En .NET existen varios enfoques para esto. Consideremos dos principales: System.Text.Json (recomendado por Microsoft) y Newtonsoft.Json (heredado, pero aún ampliamente utilizado).
Serialización con System.Text.Json
A partir de .NET Core 3.0, Microsoft presentó su propia biblioteca para trabajar con JSON: System.Text.Json. Se caracteriza por su alto rendimiento y mínimo consumo de memoria. Para la serialización se utiliza el método JsonSerializer.Serialize().
using System;using System.Text.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
class Program{ static void Main() { var person = new Person { Name = "Иван Петров", Age = 30, Email = "ivan@example.com" };
string json = JsonSerializer.Serialize(person); Console.WriteLine(json); }}Resultado de la ejecución:
{"Name":"Иван Петров","Age":30,"Email":"ivan@example.com"}Serialización con Newtonsoft.Json
La biblioteca Newtonsoft.Json (también conocida como Json.NET) fue durante mucho tiempo el estándar de facto. Proporciona más flexibilidad y opciones de configuración que la solución integrada. Para usarla, es necesario instalar el paquete NuGet Newtonsoft.Json.
using System;using Newtonsoft.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
class Program{ static void Main() { var person = new Person { Name = "Мария Сидорова", Age = 25, Email = "maria@example.com" };
string json = JsonConvert.SerializeObject(person); Console.WriteLine(json); }}El resultado será similar, pero Newtonsoft.Json por defecto usa la notación camelCase para los nombres de las propiedades, si está configurado.
Configuración de la serialización
En ambas bibliotecas se puede controlar el formato de salida: ignorar valores null, usar CamelCase, formatear JSON con sangrías, etc.
Ejemplo para System.Text.Json con configuraciones:
var options = new JsonSerializerOptions{ WriteIndented = true, // Salida bonita con sangrías PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // Notación camelCase DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull // Ignorar null};
string json = JsonSerializer.Serialize(person, options);Análisis (deserialización) de JSON en C#
La deserialización es el proceso inverso: convertir una cadena JSON en un objeto de C#. Esto es necesario al recibir datos de una API, leer archivos de configuración