Share via


Serialização (C# e Visual Basic)

Serialização é o processo de converter um objeto em um fluxo de bytes, a fim de que ele persista na memória, num banco de dados, ou num arquivo. Sua finalidade principal é salvar o estado de um objeto para ser capaz de recriá-lo quando necessário. O processo inverso é chamado desserialização.

Como a serialização funciona

Esta ilustração mostra o processo geral de serialização.

Gráfico de serialização

O objeto é serializado em um fluxo, que transporta não apenas a dados, mas informações sobre o tipo do objeto, como seu nome, versão, cultura, e assembly. Desse fluxo, ele pode ser armazenado em um banco de dados, em um arquivo, ou na memória.

Usos para a Serialização

A serialização permite que o desenvolvedor salve o estado de um objeto e o recrie conforme necessário, fornecendo o armazenamento dos objetos, bem como intercâmbio de dados. Através da serialização, um desenvolvedor pode executar ações como enviar o objeto para um aplicativo remoto por meio de um serviço da Web, passando um objeto de um domínio para outro, passando um objeto através de um firewall como uma sequência XML, ou manter a segurança ou informações específicas de usuário entre aplicativos.

Tornando um objeto serializavel

Para serializar um objeto, é necessário que o objeto a ser serializado, um fluxo para conter o objeto serializado e um Formatter. System.Runtime.Serializationcontém as classes necessárias para serialização e desserialização de objetos.

Aplicar o atributo SerializableAttribute para um tipo para indicar que instâncias deste tipo que podem ser serializadas. Uma exceção SerializationException será apresentada se você tenta serializar mas o tipo não tem o atributo SerializableAttribute.

Se você não desejar um campo em sua classe para ser serializável, aplique o atributo NonSerializedAttribute. Se um campo de um tipo que pode ser serializado contém um ponteiro, um manipulador, ou algumas outras estruturas de dados que sejam específicas para um determinado ambiente, e o campo não pode ser reconstituído com sentido em um ambiente diferente, então você pode querer torná-lo não serializável.

Se uma classe serializada contiver referências a objetos de outras classes que estão marcadas SerializableAttribute, os objetos também poderão ser serializados.

Binário e Serialização em XML

Tanto serialização Binária ou XML podem ser usadas. Em serialização binária, todos os membros, mesmo aqueles que são somente leitura, são serializados, e o desempenho é aprimorado. Serialização XML fornece código mais legível, bem como maior flexibilidade de compartilhamento de objeto e uso para fins de interoperabilidade.

Serialização em binário

A serialização em binário usa a codificação em binário para produzir uma serialização compacta para usos, como armazenamento ou fluxos com soquetes de rede.

Serialização em XML

A serialização em XML serializa os campos públicos e as propriedades de um objeto, ou os parâmetros e retornar os valores de métodos, em um fluxo XML que está de acordo a linguagem de definição de esquema XML (XSD) específico. A serialização XML resulta em uma classes fortemente tipada com propriedades públicas e campos que são convertidos em XML. System.Xml.Serializationcontém as classes necessárias para serialização e desserialização de XML.

Você pode aplicar atributos a classes e a membros de classe para controlar a maneira como o XmlSerializer serializa ou desserializa uma instância da classe.

Serialização SOAP

A serialização XML pode ser usada para serializar objetos em fluxos XML que estão em conformidade com a especificação SOAP. O SOAP é um protocolo com base em XML, desenvolvido especificamente para transporte de chamadas de procedimento usando XML. Como a serialização regular em XML, atributos podem ser usadas para controlar as mensagens SOAP geradas por um Web Services XML.

Serialização Básica e Personalizada

A serialização pode ser realizada de duas maneiras: básica e personalizada. A serialização básica usa o .NET Framework para serializar automaticamente o objeto.

Serialização Básica

O único requisito na serialização básico é o objeto tem o SerializableAttribute atributo aplicado. O NonSerializedAttribute pode ser usado para impedir que campos específicos sejam serializado .

Quando você usa a serialização básica, a versão dos objetos podem criar problemas, no caso uma serialização personalizada pode ser preferível. A serialização básica é a maneira mais fácil de executar a serialização, mas ela não fornece muito controle sobre o processo.

Serialização Personalizada

Na serialização personalizada, você pode especificar exatamente quais objetos vão ser serializados e como será efetuado. A classe SerializableAttribute deve ser marcada e implementar a interface ISerializable.

Se você desejar que o objeto seja desserializado de uma maneira personalizada, tudo bem, use um construtor personalizado.

O Designer de Serialização

O Designer de Serialização é um formulário especial de serialização que envolve o tipo de persistência do objeto geralmente associado a ferramentas de desenvolvimento. O Designer de Serialização é o processo de conversão de um objeto gráfico em um arquivo de origem que posteriormente pode ser usado para recuperar o objeto gráfico. Um arquivo de origem pode conter código, marcação, ou mesmo informações de uma tabela SQL. Para obter mais informações, consulte Designer Serialization Overview.

Tópicos relacionados