Procesamiento de JSON en C# (.NET): Guía completa de Newtonsoft.Json y System.Text.Json

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

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.Json

O a través de .NET CLI:

dotnet add package Newtonsoft.Json


Operaciones 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}");

Recommendations