Serialização de objetos em C# (.NET): do básico às técnicas avançadas
Serialização é o processo de converter objetos complexos (classes, estruturas) em um formato que pode ser salvo em arquivo, transmitido pela rede ou armazenado em banco de dados. O processo inverso (restauração do objeto a partir do fluxo de dados) é chamado de desserialização. Na plataforma .NET, existem várias ferramentas nativas e de terceiros para serialização, cada uma com suas características, desempenho e área de aplicação.
Neste artigo, abordaremos os principais métodos de serialização em C#: JSON (System.Text.Json e Newtonsoft.Json), XML (XmlSerializer), serialização binária (BinaryFormatter — obsoleto, mas ainda encontrado) e Protocol Buffers (protobuf-net) para cenários de alto desempenho.
1. Serialização em JSON com System.Text.Json
A partir do .NET Core 3.0, a Microsoft recomenda usar o namespace System.Text.Json para trabalhar com JSON. É uma API rápida, de baixo nível e assíncrona.
Exemplo de serialização e desserialização:
using System;using System.Text.Json;
public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}
class Program{ static void Main() { var person = new Person { Name = "Ivan Petrov", Age = 30, Email = "ivan@example.com" };
// Serialização para string JSON string jsonString = JsonSerializer.Serialize(person); Console.WriteLine(jsonString); // Saída: {"Name":"Ivan Petrov","Age":30,"Email":"ivan@example.com"}
// Desserialização de JSON string jsonInput = @"{""Name"":""Maria"",""Age"":25,""Email"":""maria@test.ru""}"; Person restoredPerson = JsonSerializer.Deserialize<Person>(jsonInput); Console.WriteLine($"Nome: {restoredPerson.Name}, Idade: {restoredPerson.Age}"); }}Configuração da serialização:
- Ignorar propriedades nulas:
JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull } - Formatação (pretty print):
JsonSerializerOptions { WriteIndented = true } - Trabalhar com referências cíclicas:
ReferenceHandler.Preserve
2. Newtonsoft.Json (Json.NET) — o clássico
Antes do System.Text.Json, o padrão de facto era a biblioteca Newtonsoft.Json (instalada via NuGet). Ela suporta mais cenários: objetos dinâmicos, atributos, conversores e configurações flexíveis.
using Newtonsoft.Json;
public class Order{ public int Id { get; set; } public decimal Amount { get; set; } [JsonIgnore] public string InternalNote { get; set; } // Este campo não será serializado}
var order = new Order { Id = 1, Amount = 99.99m, InternalNote = "Secreto" };string json = JsonConvert.SerializeObject(order, Formatting.Indented);Console.WriteLine(json);// {// "Id": 1,// "Amount": 99.99// }
var deserialized = JsonConvert.DeserializeObject<Order>(json);3. Serialização em XML (XmlSerializer)
Para o formato XML no .NET, utiliza-se a classe XmlSerializer. Ela é adequada para compatibilidade com sistemas legados e serviços SOAP.
using System;using System.IO;using System.Xml.Serialization;
[Serializable]public class Product{ [XmlAttribute] public int Id { get; set; } [XmlElement("ProductName")] public string Name { get; set; }}
class Program{ static void Main() { var product = new Product { Id = 42, Name = "Notebook" };
// Serialização Também na biblioteca
Monitoramento de aplicativos Swift em iOS/macOS: bibliotecas e ferramentas
Envio de SMS em TypeScript: Bibliotecas de API e Integração
Guia completo do Twilio para JavaScript (Node.js) com exemplos
Aprendizado de Máquina em C#: bibliotecas ML.NET e Accord.NET