Objeto C# a JSON en .NET: Secretos de velocidad y rendimiento

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

Introducción: Por qué todo desarrollador C# debe saber serializar objetos a JSON

\n\n

¿Alguna vez te has preguntado cuántas veces al día tu código convierte objetos complejos de C# en cadenas JSON compactas? Trabajar con API web, guardar configuraciones, transmitir datos entre microservicios — en todas partes nos encontramos con la serialización. La pregunta "How do I turn a C# object into a JSON string in .NET?" es una de las más populares en Stack Overflow, y no es casualidad. De cómo lo hagas depende la velocidad de tu aplicación y su capacidad de respuesta.

\n\n

En este artículo no solo mostraremos cómo convertir un objeto en una cadena JSON. Analizaremos la optimización y el rendimiento de este proceso: desde la elección de la biblioteca hasta el ajuste fino del serializador. Aprenderás a evitar errores típicos que ralentizan tu aplicación y a escribir código que funcione a la velocidad del rayo.

\n\n

Método básico: cómo convertir un objeto C# en una cadena JSON

\n\n

Empecemos con lo clásico. Supongamos que tenemos una clase simple User:

\n\n
public class User\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n    public string Email { get; set; }\n}
\n\n

La forma más sencilla de serializarla es usando Newtonsoft.Json (también conocido como Json.NET):

\n\n
using Newtonsoft.Json;\n\nvar user = new User { Id = 1, Name = "Alexey", Email = "alex@example.com" };\nstring json = JsonConvert.SerializeObject(user);\nConsole.WriteLine(json); \n// {"Id":1,"Name":"Alexey","Email":"alex@example.com"}
\n\n

Con la llegada de .NET Core 3.0 apareció el nativo System.Text.Json — una alternativa rápida y ligera:

\n\n
using System.Text.Json;\n\nvar user = new User { Id = 1, Name = "Alexey", Email = "alex@example.com" };\nstring json = JsonSerializer.Serialize(user);\nConsole.WriteLine(json);\n// {"Id":1,"Name":"Alexey","Email":"alex@example.com"}
\n\n

Parecería que no hay diferencia. Pero cuando tu aplicación procesa miles de solicitudes por segundo, la elección del serializador se vuelve crítica.

\n\n

Rendimiento: Newtonsoft.Json vs System.Text.Json

\n\n

Veamos el rendimiento de serialización en .NET 8. En pruebas con 1 millón de operaciones:

\n\n
    \n
  • System.Text.Json — en promedio es 40-60% más rápido que Newtonsoft.Json al serializar objetos simples.
  • \n
  • Newtonsoft.Json — pierde en velocidad, pero gana en flexibilidad: admite más convertidores personalizados y atributos.
  • \n
  • Consumo de memoria — System.Text.Json genera menos basura, lo que reduce la carga en el recolector de basura (GC).
  • \n
\n\n

Sin embargo, hay un matiz: si necesitas soporte para JsonIgnore, JsonPropertyName o convertidores complejos, Newtonsoft.Json sigue siendo insustituible. Pero para la mayoría de los proyectos modernos en .NET 6+ se recomienda usar System.Text.Json.

\n\n

Optimización de la serialización: 5 consejos prácticos

\n\n

Ahora pasemos a lo más interesante: cómo hacer tu código aún más rápido.

\n\n

1. Usa source generators (generadores de código fuente)

\n\n

System.Text.Json admite source generation — esto compila el código de serialización en tiempo de compilación, no durante la ejecución. Resultado: ¡aceleración de 2 a 3 veces!

\n\n
[JsonSerializable(typeof(User))]\npublic partial class UserContext : JsonSerializerContext\n{\n}\n\n// Uso:\nstring json = JsonSerializer.Serialize(user, UserContext.Default.User);
\n\n

Este enfoque es especialmente efectivo para modelos grandes y aplicaciones con alta carga.

\n\n

2. Configura el serializador según tus tareas

\n\n

No uses la configuración predeterminada. Desactiva opciones innecesarias:

\n\n
var options = new JsonSerializerOptions\n{\n    PropertyNamingPolicy = JsonNami                

Blogs

Book Recommendations