ISerializable Interface

Definição

Permite que um objeto controle sua própria serialização e desserialização por meio da serialização binária e XML.

public interface class ISerializable
public interface ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
public interface ISerializable
type ISerializable = interface
[<System.Runtime.InteropServices.ComVisible(true)>]
type ISerializable = interface
Public Interface ISerializable
Derivado
Atributos

Comentários

Qualquer classe que possa ser serializada usando serialização binária ou XML deve ser marcada com .SerializableAttribute Se uma classe precisar controlar seu processo de serialização binária ou XML, ela poderá implementar a ISerializable interface. Chama Formatter o GetObjectData tempo de serialização e preenche o fornecido SerializationInfo com todos os dados necessários para representar o objeto. O Formatter cria um SerializationInfo com o tipo do objeto no grafo. Objetos que precisam enviar proxies para si mesmos podem usar e FullTypeNameAssemblyName métodos SerializationInfo para alterar as informações transmitidas.

No caso da herança de classe, é possível serializar uma classe que deriva de uma classe base que implementa ISerializable. Nesse caso, a classe derivada deve chamar a implementação de classe base de dentro de GetObjectData sua implementação de GetObjectData. Caso contrário, os dados da classe base não serão serializados.

A ISerializable interface implica um construtor com a assinatura constructor (SerializationInfo information, StreamingContext context). No momento da desserialização, o construtor atual é chamado somente depois que os dados no SerializationInfo foram desserializados pelo formatador. Em geral, esse construtor deve ser protected se a classe não sealedfor .

A ordem na qual os objetos são desserializados não pode ser garantida. Por exemplo, se um tipo fizer referência a um tipo que ainda não foi desserializado, ocorrerá uma exceção. Se você estiver criando tipos que têm essas dependências, poderá contornar o problema implementando a IDeserializationCallback interface e o OnDeserialization método.

A arquitetura de serialização manipula tipos de objeto que estendem MarshalByRefObject o mesmo que os tipos que se estendem Object. Esses tipos podem ser marcados com a SerializableAttribute interface e implementar como ISerializable qualquer outro tipo de objeto. O estado do objeto será capturado e persistido no fluxo.

Quando esses tipos estão sendo usados por meio System.Runtime.Remoting, a infraestrutura de comunicação remota fornece um substituto que preempõe a serialização típica e, em vez disso, serializa um proxy para o MarshalByRefObject. Um substituto é um auxiliar que sabe como serializar e desserializar objetos de um tipo específico. O proxy, invisível para o usuário na maioria dos casos, será do tipo ObjRef.

Como um padrão de design geral, seria incomum que uma classe fosse marcada com o atributo serializável e se estendesse MarshalByRefObject. Os desenvolvedores devem pensar cuidadosamente sobre os possíveis cenários de serialização e comunicação remota ao combinar essas duas características. Um exemplo em que isso pode ser aplicável é com um MemoryStream. Embora a classe base de MemoryStream (Stream) se estenda MarshalByRefObject, é possível capturar o estado de um MemoryStream e restaurá-lo à vontade. Portanto, pode ser significativo serializar o estado desse fluxo em um banco de dados e restaurá-lo em algum momento posterior. No entanto, quando usado por meio da comunicação remota, um objeto desse tipo seria proxie.

Para obter mais informações sobre a serialização de classes que se estendem MarshalByRefObject, consulte RemotingSurrogateSelector. Para obter mais informações sobre a implementação ISerializable, consulte Serialização Personalizada.

Note

Essa interface não se aplica à serialização JSON usando System.Text.Json.

Notas aos Implementadores

Implemente essa interface para permitir que um objeto participe de sua própria serialização e desserialização.

Métodos

Nome Description
GetObjectData(SerializationInfo, StreamingContext)

Popula um SerializationInfo com os dados necessários para serializar o objeto de destino.

Aplica-se a

Confira também