Serialização e desserialização em C# com exemplo

⚡ Resumo Inteligente

A serialização em C# converte um objeto em um fluxo de bytes para que ele possa ser salvo em um arquivo ou enviado entre aplicativos; a desserialização reconstrói o objeto. Aqui você aprenderá a serializar e desserializar objetos com exemplos.

  • 🔄 O que é: A serialização grava um objeto C# em um arquivo e a desserialização o lê de volta.
  • 🏷️ [Serializável]: Uma classe precisa do atributo [Serializable] antes de poder ser serializada.
  • 💾 Formato binário: O BinaryFormatter com um FileStream grava o objeto em formato binário.
  • 🧩 Formatos: O C# também oferece suporte à serialização XML e JSON para uma saída legível.
  • 🤖 Ajuda da IA: Ferramentas de IA como o GitHub Copilot geram código de serialização instantaneamente.

Serialização e desserialização em C#

Serialização e desserialização em C#

O conceito de serialização e desserialização é utilizado sempre que dados referentes a objetos precisam ser enviados de uma aplicação para outra. A serialização é usada para exportar os dados da aplicação para um arquivo. A aplicação de destino, então, utiliza a desserialização para exportá-los.tracos dados do aplicativo para uso posterior.

Serialização é um conceito no qual objetos da classe C# são gravados ou serializados em arquivos. Digamos que você tenha uma aula de C# chamada Tutorial. E a classe possui 2 propriedades de ID e nome dos Tutoriais.

A serialização pode ser usada para gravar diretamente as propriedades de dados da classe Tutorial em um arquivo. A desserialização é usada para ler os dados do arquivo e construir o objeto Tutorial novamente.

Tipos de serialização em C#

O C# suporta diversos formatos de serialização, e você escolhe um com base em onde os dados serão usados. Os principais tipos estão listados abaixo.

  • Serialização binária Converte um objeto em um fluxo binário compacto. É rápido, mas não legível por humanos e está vinculado ao .NET.
  • Serialização XML Utiliza a classe XmlSerializer para gravar as propriedades públicas de um objeto em um arquivo XML legível.
  • Serialização JSON Utiliza System.Text.Json ou Newtonsoft.Json para produzir JSON leve, o formato mais comum para APIs da web.
  • Serialização SOAP Formata dados como mensagens SOAP para serviços web mais antigos.

Como serializar um objeto em C#

Vejamos um exemplo de como podemos conseguir isso.

Em nosso exemplo, executaremos as etapas de alto nível abaixo no código

  1. Crie uma classe chamada Tutorial que possui 2 propriedades, nomeadamente ID e Nome
  2. Em seguida, criaremos um objeto da classe e atribuiremos um valor “1” à propriedade ID e um valor “.Net” à propriedade name.
  3. Em seguida, usaremos a serialização para serializar o objeto acima em um arquivo chamado Exemplo.txt
  4. Por fim, usaremos a desserialização para desserializar o objeto do arquivo e exibir os valores no Console.

Insira o código abaixo no arquivo program.cs do aplicativo de console.

Passo 1) Adicione a classe.

O primeiro passo é adicionar a classe que será usada para serialização

Serializar um objeto em C#

Code Explicação:-

  1. A classe que precisa ser serializada precisa ter o atributo [Serializable]. Esta é uma palavra-chave em C#. Esta palavra-chave é então anexada à classe Tutorial. Se você não mencionar esse atributo, receberá um erro ao tentar serializar a classe.
  2. A seguir está a definição da classe que será serializada. Aqui estamos definindo uma classe chamada “Tutorial” e fornecendo 2 propriedades, uma é “ID” e a outra é “Nome”.

Passo 2) Crie o objeto.

Nesta etapa, primeiro criaremos o objeto da classe Tutorial e serializá-lo-emos no arquivo chamado Exemplo.txt

Serializar um objeto em C#

Code Explicação:-

  1. Primeiro, criamos um objeto da classe Tutorial. Em seguida, atribuímos o valor “1” ao ID e “.net” à propriedade name.
  2. Em seguida, usamos a classe formatadora que é usada para serializar ou converter o objeto em um formato binário. Os dados do arquivo em serialização são feitos em formato binário. A seguir, criamos um objeto de fluxo de arquivos. O objeto de fluxo de arquivo é usado para abrir o arquivo Exemplo.txt para fins de escrita. As palavras-chave FileMode.Create e FileMode.Write são usadas para mencionar especificamente que o arquivo deve ser aberto para fins de escrita.
  3. Finalmente, usamos o método Serialize para transferir os dados binários para o arquivo. Fechamos então o stream, já que a gravação operação está completo.

Passo 3) Use desserialização.

Finalmente, para garantir que os dados estejam presentes no arquivo, usamos a desserialização para desserializar o objeto do arquivo.

Serializar um objeto em C#

using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  [Serializable]
  class Tutorial
  {
  public int ID;
  public String Name;
   static void Main(string[] args)
   {
    Tutorial obj = new Tutorial();
    obj.ID = 1;
    obj.Name = ".Net";

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Create,FileAccess.Write);

    formatter.Serialize(stream, obj);
    stream.Close();

    stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Open,FileAccess.Read);
    Tutorial objnew = (Tutorial)formatter.Deserialize(stream);

    Console.WriteLine(objnew.ID);
    Console.WriteLine(objnew.Name);

    Console.ReadKey();
  }
 }
}

Code Explicação:-

  1. Criamos o objeto “transmitir canais”Para abrir o arquivo Exemplo.txt no modo somente leitura.
  2. Em seguida, usamos a classe formatadora que é usada para desserializar o objeto, que é armazenado no arquivo Exemplo.txt. O objeto retornado é definido como o objeto objnew.
  3. Por fim, exibimos as propriedades do objeto “objnew” no console usando as propriedades “ID” e “nome”.

Quando o código acima é definido e o projeto é executado usando Visual Studio, você obterá a saída abaixo.

Resultado:-

Serializar um objeto em C#

Você pode ver na saída acima que os valores do arquivo foram desserializados corretamente e exibidos no console.

Serialização JSON em C#

JSON é o formato mais utilizado para aplicações modernas e APIs web. O recurso integrado System.Text.Json O namespace serializa e desserializa objetos com uma única chamada de método, conforme mostrado abaixo.

using System;
using System.Text.Json;
namespace DemoApplication
{
  class Tutorial
  {
    public int ID { get; set; }
    public string Name { get; set; }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Tutorial obj = new Tutorial { ID = 1, Name = ".Net" };
      string json = JsonSerializer.Serialize(obj);
      Console.WriteLine(json);

      Tutorial objnew = (Tutorial)JsonSerializer.Deserialize(json, typeof(Tutorial));
      Console.WriteLine(objnew.Name);
      Console.ReadKey();
    }
  }
}

Saída:

{"ID":1,"Name":".Net"}
.Net

Perguntas Frequentes

A serialização converte um objeto C# em um fluxo de bytes (binário, XML ou JSON) para que ele possa ser salvo em um arquivo ou enviado para outro aplicativo. A desserialização reconstrói o objeto a partir desses dados.

O atributo [Serializable] marca uma classe para que seus objetos possam ser serializados. Sem ele, a serialização binária gera uma exceção ao tentar gravar o objeto em um arquivo.

O C# oferece suporte à serialização binária (compacta, exclusiva do .NET), serialização XML por meio do XmlSerializer, serialização JSON por meio do System.Text.Json e serialização SOAP para serviços web mais antigos.

A serialização grava os dados de um objeto em um arquivo ou fluxo, enquanto a desserialização lê esses dados de volta e reconstrói o objeto original na memória.

O BinaryFormatter agora está obsoleto e é considerado inseguro porque pode executar código malicioso durante a desserialização. Microsoft Recomenda-se o uso de System.Text.Json ou XmlSerializer para novas aplicações.

Assistentes de IA como o GitHub Copilot completam automaticamente as chamadas Serialize e Deserialize, adicionam o atributo [Serializable] e geram código de serialização JSON ou XML a partir de um breve comentário.

Sim. Ferramentas com inteligência artificial geram classes de modelos, escolhem entre formatos JSON, XML e binário e adicionam tratamento de erros para que seu código de serialização seja seguro e completo.

A serialização binária utiliza System.Runtime.Serialization.Formatters.Binary, a serialização JSON utiliza System.Text.Json e a serialização XML utiliza System.Xml.Serialization.

Resuma esta postagem com: