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\nEn 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\nMétodo básico: cómo convertir un objeto C# en una cadena JSON
\n\nEmpecemos con lo clásico. Supongamos que tenemos una clase simple User:
public class User\n{\n public int Id { get; set; }\n public string Name { get; set; }\n public string Email { get; set; }\n}\n\nLa forma más sencilla de serializarla es usando Newtonsoft.Json (también conocido como Json.NET):
\n\nusing 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\nCon la llegada de .NET Core 3.0 apareció el nativo System.Text.Json — una alternativa rápida y ligera:
\n\nusing 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\nParecerí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\nRendimiento: Newtonsoft.Json vs System.Text.Json
\n\nVeamos 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
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.
Optimización de la serialización: 5 consejos prácticos
\n\nAhora pasemos a lo más interesante: cómo hacer tu código aún más rápido.
\n\n1. Usa source generators (generadores de código fuente)
\n\nSystem.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\nEste enfoque es especialmente efectivo para modelos grandes y aplicaciones con alta carga.
\n\n2. Configura el serializador según tus tareas
\n\nNo uses la configuración predeterminada. Desactiva opciones innecesarias:
\n\nvar options = new JsonSerializerOptions\n{\n PropertyNamingPolicy = JsonNami