Introdução: Por que todo desenvolvedor C# deve saber serializar objetos em JSON
\n\nVocê já parou para pensar quantas vezes por dia seu código transforma objetos C# complexos em strings JSON compactas? Trabalho com APIs web, salvamento de configurações, transferência de dados entre microsserviços — em todos os lugares encontramos a serialização. A pergunta "How do I turn a C# object into a JSON string in .NET?" é uma das mais populares no Stack Overflow, e não é por acaso. A forma como você faz isso impacta diretamente a velocidade e a capacidade de resposta da sua aplicação.
\n\nNeste artigo, não vamos apenas mostrar como converter um objeto em uma string JSON. Vamos abordar a otimização e performance desse processo: desde a escolha da biblioteca até o ajuste fino do serializador. Você aprenderá a evitar erros comuns que tornam sua aplicação mais lenta e a escrever código que funciona de forma ultrarrápida.
\n\nMétodo básico: como transformar um objeto C# em string JSON
\n\nVamos começar pelo clássico. Suponha que temos uma classe simples 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\nA maneira mais simples de serializá-la é usando o Newtonsoft.Json (também conhecido 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\nCom o lançamento do .NET Core 3.0, surgiu o nativo System.Text.Json — uma alternativa rápida e leve:
\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\nÀ primeira vista, não há diferença. Mas quando sua aplicação processa milhares de requisições por segundo, a escolha do serializador se torna crítica.
\n\nPerformance: Newtonsoft.Json vs System.Text.Json
\n\nVamos analisar a performance de serialização no .NET 8. Em testes com 1 milhão de operações:
\n\n- \n
- System.Text.Json — em média, 40-60% mais rápido que o Newtonsoft.Json na serialização de objetos simples. \n
- Newtonsoft.Json — perde em velocidade, mas ganha em flexibilidade: suporta mais conversores personalizados e atributos. \n
- Consumo de memória — System.Text.Json gera menos lixo, reduzindo a carga no coletor de lixo (GC). \n
No entanto, há uma ressalva: se você precisar de suporte para JsonIgnore, JsonPropertyName ou conversores complexos, o Newtonsoft.Json ainda é indispensável. Mas para a maioria dos projetos modernos em .NET 6+, recomenda-se o uso do System.Text.Json.
Otimização da serialização: 5 dicas práticas
\n\nAgora vamos ao que interessa — como tornar seu código ainda mais rápido.
\n\n1. Use source generators (geradores de código fonte)
\n\nO System.Text.Json oferece suporte a source generation — a compilação do código de serialização em tempo de build, e não em tempo de execução. Resultado: aceleração de 2 a 3 vezes!
\n\n[JsonSerializable(typeof(User))]\npublic partial class UserContext : JsonSerializerContext\n{\n}\n\n// Uso:\nstring json = JsonSerializer.Serialize(user, UserContext.Default.User);\n\nEssa abordagem é especialmente eficaz para modelos grandes e aplicações com alta carga.
\n\n2. Configure o serializador para suas necessidades
\n\nNão use as configurações padrão. Desative opções desnecessárias:
\n\nvar options = new JsonSerializerOptions\n{\n PropertyNamingPolicy = JsonNami