Eu descobri que algumas classes usam o [Serializable]
atributo
- O que é isso?
- Quando devo usá-lo?
- Que tipo de benefícios vou receber?
c#
.net
serialization
Kevin
fonte
fonte
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-meanRespostas:
O que é isso?
Quando você cria um objeto em um aplicativo de estrutura .Net, não precisa pensar em como os dados são armazenados na memória. Porque o .Net Framework cuida disso para você. No entanto, se você deseja armazenar o conteúdo de um objeto em um arquivo, enviar um objeto para outro processo ou transmiti-lo pela rede, é necessário pensar em como o objeto é representado, pois será necessário converter para um formato diferente. . Essa conversão é chamada de serialização.
Usos para serialização
A serialização permite que o desenvolvedor salve o estado de um objeto e o recrie conforme necessário, fornecendo armazenamento de objetos e troca de dados. Por meio 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, passar um objeto de um domínio para outro, passar um objeto através de um firewall como uma string XML ou manter a segurança ou a segurança específica do usuário. informações entre aplicativos.
Aplique
SerializableAttribute
a um tipo para indicar que instâncias desse tipo podem ser serializadas. Aplique oSerializableAttribute
mesmo se a classe também implementar aISerializable
interface para controlar o processo de serialização.Todos os campos públicos e privados de um tipo marcado por
SerializableAttribute
são serializados por padrão, a menos que o tipo implemente aISerializable
interface para substituir o processo de serialização. O processo de serialização padrão exclui os campos marcados comNonSerializedAttribute
. Se um campo de um tipo serializável contiver um ponteiro, um identificador ou alguma outra estrutura de dados específica de um ambiente específico e não puder ser significativamente reconstituída em um ambiente diferente, convém aplicarNonSerializedAttribute
a esse campo.Veja MSDN para mais detalhes.
Editar 1
Ao transferir ou salvar dados, você precisa enviar ou salvar apenas os dados necessários. Portanto, haverá menos atrasos na transferência e problemas de armazenamento. Assim, você pode optar por excluir um bloco desnecessário de dados ao serializar.
fonte
Alguns usos práticos para o
[Serializable]
atributo:BinaryFormatter
classe em System.Runtime.Serialization.Formatters.BinaryClipboard.SetData()
classes não-socializáveis não podem ser colocadas na área de transferência.MarshalByRefObject
) deve ser serializável.Esses são os casos de uso mais comuns que já encontrei.
fonte
Como a pergunta original era sobre o SerializableAttribute, observe-se que esse atributo se aplica apenas ao usar o BinaryFormatter ou SoapFormatter.
É um pouco confuso, a menos que você preste atenção aos detalhes, a respeito de quando usá-lo e qual é o seu objetivo real.
Não tem nada a ver com serialização XML ou JSON.
Usadas com o SerializableAttribute são a ISerializable Interface e a SerializationInfo Class. Eles também são usados apenas com o BinaryFormatter ou SoapFormatter.
A menos que você pretenda serializar sua classe usando Binário ou Sabão, não se preocupe em marcar sua classe como [Serializable]. Os serializadores XML e JSON nem sabem da sua existência.
fonte
Serializable
e sem quando o atributo foi removido. Então, alguma interferência é possível.Como funciona a serialização
Esta ilustração mostra o processo geral de serialização.
O objeto é serializado em um fluxo, que carrega não apenas os dados, mas informações sobre o tipo do objeto, como sua versão, cultura e nome do assembly. A partir desse fluxo, ele pode ser armazenado em um banco de dados, um arquivo ou memória.
Detalhes em msdn.
fonte
Aqui está um pequeno exemplo de como a serialização funciona. Eu também estava aprendendo sobre o mesmo e achei dois links úteis. O que é serialização e como isso pode ser feito no .NET .
Um programa de amostra explicando serialização
Se você não entender o programa acima, um programa muito simples com explicações é fornecido aqui .
fonte
Serialização
Serialização é o processo de converter um objeto ou um conjunto de objetos em um fluxo, é uma matriz de bytes no caso de serialização binária
Usos de serialização
Abaixo estão alguns atributos personalizados úteis que são usados durante a serialização de um objeto
[Serializable] -> É usado quando marcamos o serializável de um objeto [NonSerialized] -> É usado quando não queremos serializar o campo de um objeto. [OnSerializing] -> É usado quando queremos executar alguma ação ao serializar um objeto [OnSerialized] -> É usado quando queremos executar alguma ação após serializar um objeto no fluxo.
Abaixo está o exemplo de serialização
Aqui está o código de chamada
fonte