Procesamiento de JSON en C# (.NET): Guía completa
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en el estándar para las API web y los archivos de configuración. En el ecosistema de C# (.NET), existen dos herramientas principales para trabajar con JSON: la biblioteca probada por el tiempo Newtonsoft.Json (también conocida como Json.NET) y la moderna biblioteca integrada System.Text.Json, que apareció en .NET Core 3.0. En este artículo, analizaremos en detalle ambas bibliotecas, sus capacidades y ejemplos de uso.
1. Newtonsoft.Json (Json.NET)
Newtonsoft.Json ha sido el estándar de facto para trabajar con JSON en C# durante muchos años. Ofrece una funcionalidad rica, que incluye serialización flexible, soporte para LINQ to JSON y trabajo con tipos dinámicos.
Instalación
Para instalar a través de NuGet Package Manager, ejecute el comando:
Install-Package Newtonsoft.JsonO a través de .NET CLI:
dotnet add package Newtonsoft.JsonOperaciones básicas: serialización y deserialización
La serialización es la conversión de un objeto de C# a una cadena JSON. La deserialización es el proceso inverso.
using Newtonsoft.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public List<string> Hobbies { get; set; }}
// SerializaciónPerson person = new Person{ Name = "Alexey", Age = 30, Hobbies = new List<string> { "Programación", "Lectura", "Viajes" }};
string json = JsonConvert.SerializeObject(person, Formatting.Indented);Console.WriteLine(json);
// Deserializaciónstring jsonInput = @"{'Name':'María','Age':25,'Hobbies':['Dibujo','Yoga']}";Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonInput);Console.WriteLine($"Nombre: {deserializedPerson.Name}, Edad: {deserializedPerson.Age}");Trabajo con datos dinámicos
Newtonsoft.Json admite tipos dinámicos, lo que es útil al trabajar con estructuras JSON desconocidas.
dynamic dynamicObject = JsonConvert.DeserializeObject("{'Name':'Iván','Score':95.5}");Console.WriteLine($"Estudiante: {dynamicObject.Name}, Puntaje: {dynamicObject.Score}");LINQ to JSON
La biblioteca proporciona una potente API para consultar datos JSON utilizando LINQ.
using Newtonsoft.Json.Linq;
string json = @"{ 'users': [ {'name': 'Ana', 'age': 28}, {'name': 'Pedro', 'age': 35}, {'name': 'Elena', 'age': 22} ]}";
JObject obj = JObject.Parse(json);var youngUsers = obj["users"] .Where(u => (int)u["age"] < 30) .Select(u => (string)u["name"]);
foreach (var name in youngUsers){ Console.WriteLine(name); // Mostrará: Ana, Elena}2. System.Text.Json
System.Text.Json es una biblioteca moderna de Microsoft, optimizada para el rendimiento y el consumo mínimo de memoria. Está integrada en .NET y no requiere la instalación de paquetes adicionales.
Operaciones básicas
using System.Text.Json;using System.Text.Json.Serialization;
public class Product{ [JsonPropertyName("product_name")] public string Name { get; set; } public decimal Price { get; set; } [JsonIgnore] public string InternalCode { get; set; }}
// SerializaciónProduct product = new Product{ Name = "Portátil", Price = 75000.50m, InternalCode = "INT-001"};
string json = JsonSerializer.Serialize(product, new JsonSerializerOptions { WriteIndented = true });Console.WriteLine(json);
// Deserializaciónstring jsonInput = @"{""product_name"":""Smartphone"",""Price"":45000.00}";Product deserializedProduct = JsonSerializer.Deserialize<Product>(jsonInput);Console.WriteLine($"Producto: {deserializedProduct.Name}, Precio: {deserializedProduct.Price}");