Procesamiento de JSON en C# (.NET): guía completa con ejemplos
JSON (JavaScript Object Notation) es uno de los formatos de intercambio de datos más populares en aplicaciones web modernas, API y archivos de configuración. En el ecosistema .NET, los desarrolladores tienen a su disposición potentes herramientas para trabajar con JSON, que permiten serializar fácilmente objetos a JSON y viceversa. En este artículo, analizaremos en detalle dos enfoques principales: la biblioteca integrada System.Text.Json (recomendada para .NET Core 3.0+ y .NET 5+) y la popular biblioteca de terceros Newtonsoft.Json (también conocida como Json.NET).
1. System.Text.Json — el estándar moderno de .NET
A partir de .NET Core 3.0, Microsoft presentó su propia biblioteca de alto rendimiento para trabajar con JSON — System.Text.Json. Está optimizada para un consumo mínimo de memoria y alta velocidad, lo que la convierte en la elección ideal para nuevos proyectos.
1.1. Instalación e importación
La biblioteca ya está integrada en .NET 5/6/7/8/9, por lo que no se requiere instalación adicional. Para usarla, basta con incluir el espacio de nombres:
using System.Text.Json;using System.Text.Json.Serialization;1.2. Serialización y deserialización básicas
Veamos un ejemplo simple: serializar un objeto a JSON y viceversa.
// Definimos la clasepublic class Person{ public string Name { get; set; } public int Age { get; set; } public bool IsEmployed { get; set; }}
// Serializaciónvar person = new Person { Name = "Iván", Age = 30, IsEmployed = true };string json = JsonSerializer.Serialize(person);Console.WriteLine(json); // {"Name":"Iván","Age":30,"IsEmployed":true}
// Deserializaciónvar deserializedPerson = JsonSerializer.Deserialize<Person>(json);Console.WriteLine(deserializedPerson.Name); // Iván1.3. Trabajo con atributos
System.Text.Json admite atributos para un ajuste fino de la serialización:
public class Product{ [JsonPropertyName("product_id")] public int Id { get; set; } [JsonIgnore] public string InternalCode { get; set; } [JsonConverter(typeof(JsonStringEnumConverter))] public ProductCategory Category { get; set; }}
public enum ProductCategory{ Electronics, Clothing, Food}
var product = new Product { Id = 101, InternalCode = "SECRET", Category = ProductCategory.Electronics };
string json = JsonSerializer.Serialize(product);// {"product_id":101,"Category":"Electronics"}// InternalCode no aparece en el JSON gracias a [JsonIgnore]1.4. Opciones de serialización
Puedes configurar el comportamiento del serializador mediante JsonSerializerOptions:
var options = new JsonSerializerOptions{ WriteIndented = true, // Salida formateada con sangría PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // camelCase para propiedades DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull // Ignorar null};
string prettyJson = JsonSerializer.Serialize(person, options);Console.WriteLine(prettyJson);/* Salida:{ "name": "Iván", "age": 30, "isEmployed": true}*/2. Newtonsoft.Json (Json.NET) — una herramienta probada por el tiempo
Antes de la llegada de System.Text.Json, Newtonsoft.Json era el estándar de facto para trabajar con JSON en .NET. Ofrece configuraciones más flexibles y un amplio conjunto de funciones, aunque es inferior en rendimiento.
2.1. Instalación
Para usar Newtonsoft.Json, es necesario instalar el paquete NuGet:
// A través de Package Manager Console:Install-Package Newtonsoft.Json
// O mediante .NET CLI:dotnet add package Newtonsoft.Json2.2. Trabajo básico
using Newtonsoft.Json;
public class Or También en la biblioteca
yaml-cpp para C++: guía completa con ejemplos prácticos
Flow para Kotlin: guía completa con ejemplos
Generación de PDF en JavaScript: biblioteca PDFKit
Análisis de HTML en Kotlin: jsoup, ktor, khtml y otras herramientas
Contenedor de Inyección de Dependencias en C++: biblioteca Fruit para la inyección de dependencias