Objeto C# para JSON em .NET: Segredos de Velocidade e Performance

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que todo desenvolvedor C# deve saber serializar objetos em JSON

\n\n

Você 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\n

Neste 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\n

Método básico: como transformar um objeto C# em string JSON

\n\n

Vamos começar pelo clássico. Suponha que temos uma classe simples 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

A maneira mais simples de serializá-la é usando o Newtonsoft.Json (também conhecido 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

Com o lançamento do .NET Core 3.0, surgiu o nativo System.Text.Json — uma alternativa rápida e leve:

\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

À 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\n

Performance: Newtonsoft.Json vs System.Text.Json

\n\n

Vamos 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
\n\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.

\n\n

Otimização da serialização: 5 dicas práticas

\n\n

Agora vamos ao que interessa — como tornar seu código ainda mais rápido.

\n\n

1. Use source generators (geradores de código fonte)

\n\n

O 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\n

Essa abordagem é especialmente eficaz para modelos grandes e aplicações com alta carga.

\n\n

2. Configure o serializador para suas necessidades

\n\n

Não use as configurações padrão. Desative opções desnecessárias:

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

Blogs

Book Recommendations