Procesamiento de JSON en C# (.NET): guía completa
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos, ampliamente utilizado en aplicaciones web, API y archivos de configuración. En el ecosistema de C# (.NET) existen dos enfoques principales para trabajar con JSON: la biblioteca clásica Newtonsoft.Json (también conocida como Json.NET) y la moderna biblioteca integrada System.Text.Json, que apareció en .NET Core 3.0 y versiones posteriores. En este artículo analizaremos en detalle ambas herramientas, sus capacidades, sintaxis y mejores prácticas.
1. Newtonsoft.Json (Json.NET)
La biblioteca Newtonsoft.Json fue durante mucho tiempo el estándar de facto para trabajar con JSON en C#. Proporciona una API rica, soporte para LINQ to JSON, configuración flexible de serialización y deserialización. Se puede instalar a través de NuGet:
Install-Package Newtonsoft.Json1.1. Serialización y deserialización
Las operaciones más básicas son convertir un objeto a JSON y viceversa. Consideremos la clase Person:
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}Serialización (objeto → JSON):
var person = new Person { Name = "Iván", Age = 30, Email = "ivan@example.com" };string json = JsonConvert.SerializeObject(person, Formatting.Indented);Console.WriteLine(json);Deserialización (JSON → objeto):
string json = @"{""Name"":""María"",""Age"":25,""Email"":""maria@example.com""}";Person person = JsonConvert.DeserializeObject<Person>(json);Console.WriteLine(person.Name); // María1.2. Trabajo con JObject y JArray
La biblioteca Newtonsoft.Json admite LINQ to JSON, lo que permite acceder dinámicamente a los elementos JSON sin crear clases fuertemente tipadas.
string json = @"{""products"":[{""id"":1,""name"":""Portátil""},{""id"":2,""name"":""Ratón""}]}";JObject obj = JObject.Parse(json);JArray products = (JArray)obj["products"];
foreach (var product in products){ int id = (int)product["id"]; string name = (string)product["name"]; Console.WriteLine($"ID: {id}, Name: {name}");}1.3. Atributos para configurar la serialización
Con los atributos se pueden controlar los nombres de las propiedades en JSON, ignorar campos, establecer valores predeterminados y mucho más.
public class User{ [JsonProperty("user_name")] public string Name { get; set; }
[JsonIgnore] public string Password { get; set; }
[JsonProperty("registration_date")] public DateTime CreatedAt { get; set; }}
// Al serializar, Password se omitirá y Name se convertirá en "user_name"string json = JsonConvert.SerializeObject(user);2. System.Text.Json (biblioteca integrada de .NET)
A partir de .NET Core 3.0, Microsoft presentó su propia biblioteca System.Text.Json, optimizada para el rendimiento y el consumo mínimo de memoria. No requiere la instalación de paquetes adicionales (excepto algunas extensiones).
2.1. Serialización y deserialización
El trabajo con System.Text.Json es similar a Newtonsoft.Json, pero tiene algunas diferencias en la sintaxis y el comportamiento predeterminado (por ejemplo, distingue entre mayúsculas y minúsculas).
using System.Text.Json;
var person = new Person { Name = "Alexéi", Age = 28, Email = "alex@example.com" };string json = JsonSerializer.Serialize(person, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);
// Deserializaciónstring jsonInput = @"{""Name"":""Olga"",""Age"":32,""Email"":""olga@example.com""}";Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonInput);¡Importante! Por defecto, System.Text.Json t
También en la biblioteca
Migraciones de bases de datos en Java: descripción general de herramientas populares
golangci-lint para Go: guía completa con ejemplos prácticos
Framework CLI para C# (.NET): System.CommandLine y Spectre.Console
Laravel Passport PHP: guía completa con ejemplos prácticos