ISerializable Interface

Definição

Permite que um objeto controle sua própria serialização e desserialização por meio de 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 o SerializableAttribute. Se uma classe precisar controlar seu processo de serialização binária ou XML, ela poderá implementar a ISerializable interface . O Formatter chama o GetObjectData no momento da 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 os FullTypeName métodos e AssemblyName em SerializationInfo para alterar as informações transmitidas.

No caso da herança de classe, é possível serializar uma classe derivada de uma classe base que implementa ISerializable. Nesse caso, a classe derivada deve chamar a implementação da 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 tiverem sido 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 estendem Object. Esses tipos podem ser marcados com o SerializableAttribute e implementar a ISerializable interface como 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.Remotingdo , 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 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 de 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 colocado em proxy.

Para obter mais informações sobre a serialização de classes que estendem MarshalByRefObject, consulte RemotingSurrogateSelector. Para obter mais informações sobre como implementar ISerializable, consulte Serialização personalizada.

Observação

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

GetObjectData(SerializationInfo, StreamingContext)
Obsoleto.

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

Aplica-se a

Confira também