Serialization & Deserialization
System.Text.Json β serialize, deserialize, options, converters, polimorfismo e source generators
Use
JsonSerializer.Serialize/Deserialize com JsonSerializerOptions para controlar output: camelCase, ignorar nulls, enum como string, reference handling e formatacao de datas. Decore models com [JsonPropertyName], [JsonIgnore], [JsonInclude], [JsonConstructor]. Fluxo de Serialization
O que e Serialization?
Serialization converte um objeto C# em uma representacao transferivel (JSON, XML, binario). Deserialization faz o caminho inverso β reconstroi o objeto a partir da representacao.
| Aspecto | Serialize | Deserialize |
|---|---|---|
| Direcao | Objeto β JSON string | JSON string β Objeto |
| Metodo | JsonSerializer.Serialize(obj) | JsonSerializer.Deserialize<T>(json) |
| Async | SerializeAsync(stream, obj) | DeserializeAsync<T>(stream) |
| Quando usar | Enviar via HTTP, salvar em disco, message queue | Receber via HTTP, ler de arquivo, consumir mensagem |
Atributos principais
| Atributo | O que faz | Exemplo |
|---|---|---|
[JsonPropertyName] | Renomeia a propriedade no JSON | [JsonPropertyName("id")] β "id" |
[JsonIgnore] | Exclui a propriedade do JSON | Campos internos, secrets |
[JsonInclude] | Inclui campo com setter privado | Propriedades com private set |
[JsonConstructor] | Marca o construtor para deserialize | Tipos imutaveis |
[JsonConverter] | Registra converter por tipo | [JsonConverter(typeof(DateOnlyConverter))] |
[JsonPolymorphic] | Habilita polimorfismo (.NET 7+) | Discriminator + tipos derivados |
System.Text.Json vs Newtonsoft?
System.Text.Json e o default do .NET Core 3+. Vantagens: melhor performance (ate 2x mais rapido), menor alocacao de memoria, integrado ao ASP.NET Core pipeline (sem dependencia extra), suporta
Utf8JsonReader/Writer de baixo nivel. Newtonsoft tem mais features legacy (LINQ-to-JSON com JObject, converters mais flexiveis, [JsonProperty], reference handling nativo), mas e mais lento e requer pacote NuGet. Para projetos novos, prefira System.Text.Json. Migre de Newtonsoft quando possivel.