Serialização de objetos em C# (.NET): JSON, XML e Binary

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): JSON, XML e Binary

Serialização é o processo de converter um objeto complexo (ou grafo de objetos) em um fluxo de bytes ou formato textual (JSON, XML). Isso é necessário para salvar o estado de um objeto em um arquivo, transmitir dados pela rede (REST API, gRPC) ou para cache. O processo inverso — desserialização — restaura o objeto a partir da representação serializada. No ecossistema .NET (incluindo .NET Core e .NET 5/6/7/8), existem vários mecanismos de serialização integrados.



1. System.Text.Json — serialização moderna em JSON

A partir do .NET Core 3.0, a Microsoft recomenda o uso de System.Text.Json como a principal forma de trabalhar com JSON. A biblioteca é leve, de alto desempenho e não requer dependências de terceiros (ao contrário do Newtonsoft.Json).

Exemplo básico 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 List<string> Hobbies { get; set; }}

class Program{ static void Main() { var person = new Person { Name = "Alexey", Age = 30, Hobbies = new List<string> { "Leitura", "Programação" } };

// Serialização string json = JsonSerializer.Serialize(person); Console.WriteLine(json); // {"Name":"Alexey","Age":30,"Hobbies":["Leitura","Programação"]}

// Desserialização Person restored = JsonSerializer.Deserialize<Person>(json); Console.WriteLine(restored.Name); // Alexey }}


Configuração da serialização com atributos

Você pode controlar os nomes das propriedades no JSON, ignorar valores nulos ou usar conversores personalizados:

using System.Text.Json.Serialization;

public class Product{ [JsonPropertyName("product_id")] public int Id { get; set; }

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? Description { get; set; }

[JsonConverter(typeof(JsonStringEnumConverter))] public Status Status { get; set; }}

public enum Status { Active, Inactive }


2. XmlSerializer — serialização em XML

A classe XmlSerializer (namespace System.Xml.Serialization) está disponível em todas as versões do .NET e é ideal para compatibilidade com sistemas legados ou arquivos XML de configuração.

Exemplo de trabalho com XmlSerializer

using System;using System.IO;using System.Xml.Serialization;

[XmlRoot("Employee")]public class Employee{ [XmlElement("FullName")] public string Name { get; set; }

[XmlAttribute("id")] public int Id { get; set; }

[XmlArray("Projects")] [XmlArrayItem("Project")] public List<string> Projects { get; set; }}

class Program{ static void Main() { var emp = new Employee { Id = 101, Name = "Maria Ivanova", Projects = new List<string> { "Alpha", "Beta" } };

var serializer = new XmlSerializer(typeof(Employee)); using (var writer = new StreamWriter("employee.xml")) { serializer.Serialize(writer, emp); }

// Desserialização using (var reader = new StreamReader("employee.xml")) { Employee restored = (Employee)serializer.Deserialize(reader); Console.WriteLine(restored.Name); // Maria Ivanova } }}

Importante: XmlSerializer exige que a classe tenha um construtor público sem parâmetros, e que as propriedades serializáveis sejam públicas e tenham setters.



3. BinaryFormatter (obsoleto, mas mencionado para legado)

Anteriormente, System.Runtime.Serialization.Formatters.Binary.Bi

Recommendations