Respostas:
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.
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 o SerializableAttribute
mesmo se a classe também implementar a ISerializable
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 a ISerializable
interface para substituir o processo de serialização. O processo de serialização padrão exclui os campos marcados com NonSerializedAttribute
. 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 aplicar NonSerializedAttribute
a esse campo.
Veja MSDN para mais detalhes.
Editar 1
Qualquer motivo para não marcar algo como serializável
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.
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.
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.
Serializable
e sem quando o atributo foi removido. Então, alguma interferência é possível.
Serialização é o processo de converter um objeto em um fluxo de bytes para armazenar o objeto ou transmiti-lo à memória, banco de dados ou arquivo.
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.
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 .
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
[Serializable]
internal class DemoForSerializable
{
internal string Fname = string.Empty;
internal string Lname = string.Empty;
internal Stream SerializeToMS(DemoForSerializable demo)
{
DemoForSerializable objSer = new DemoForSerializable();
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, objSer);
return ms;
}
[OnSerializing]
private void OnSerializing(StreamingContext context) {
Fname = "sheo";
Lname = "Dayal";
}
[OnSerialized]
private void OnSerialized(StreamingContext context)
{
// Do some work after serialized object
}
}
Aqui está o código de chamada
class Program
{
string fname = string.Empty;
string Lname = string.Empty;
static void Main(string[] args)
{
DemoForSerializable demo = new DemoForSerializable();
Stream ms = demo.SerializeToMS(demo);
ms.Position = 0;
DemoForSerializable demo1 = new BinaryFormatter().Deserialize(ms) as DemoForSerializable;
Console.WriteLine(demo1.Fname);
Console.WriteLine(demo1.Lname);
Console.ReadLine();
}
}
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-mean