Serialização de objetos em C# (.NET): guia completo

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

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

Recommendations