ISerializable Interface

Definição

Permite a um objeto controlar a sua própria serialização e desserialização através 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

Observações

Qualquer classe que possa ser serializada usando serialização binária ou XML deve ser marcada com o SerializableAttribute. Se uma classe precisar de controlar o seu processo de serialização binária ou XML, pode implementar a ISerializable interface. Chama Formatter o GetObjectData no momento da serialização e preenche o fornecido SerializationInfo com todos os dados necessários para representar o objeto. Cria Formatter a SerializationInfo com o tipo do objeto no grafo. Os objetos que precisam de enviar proxies para si próprios podem usar os FullTypeName métodos e AssemblyName para SerializationInfo alterar a informação transmitida.

No caso da herança de classes, é possível serializar uma classe que deriva de uma classe base que implementa ISerializable. Neste caso, a classe derivada deve chamar a implementação da classe base de GetObjectData dentro da 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 apenas depois de os dados em ter SerializationInfo sido desserializados pelo formatador. Em geral, este construtor deve ser protected se a classe não sealedfor .

A ordem em que os objetos são desserializados não pode ser garantida. Por exemplo, se um tipo referenciar um tipo que ainda não foi desserializado, ocorrerá uma exceção. Se estiver a criar tipos com tais dependências, pode contornar o problema implementando a IDeserializationCallback interface e o OnDeserialization método.

A arquitetura de serialização lida com tipos de objetos que se estendem MarshalByRefObject da mesma forma que tipos que se estendem Object. Estes tipos podem ser marcados com e SerializableAttribute implementar a ISerializable interface como qualquer outro tipo de objeto. O seu estado de objeto será capturado e persistido no fluxo.

Quando estes tipos são usados através System.Runtime.Remotingde , a infraestrutura remota fornece um substituto que preempta a serialização típica e, em vez disso, serializa um proxy para o MarshalByRefObject. Um substituto é um ajudante que sabe como serializar e desserializar objetos de um determinado tipo. O proxy, invisível para o utilizador na maioria dos casos, será do tipo ObjRef.

Como padrão geral de design, seria invulgar que uma classe estivesse marcada tanto com o atributo serializável como estendesse MarshalByRefObject. Os programadores devem pensar cuidadosamente nos possíveis cenários de serialização e remotos ao combinar estas duas características. Um exemplo em que isto pode ser aplicável é com um MemoryStream. Embora a classe base de MemoryStream (Stream) se estenda de MarshalByRefObject, é possível capturar o estado de a MemoryStream e restaurá-lo à vontade. Pode, portanto, ser significativo serializar o estado deste fluxo numa base de dados e restaurá-lo mais tarde. No entanto, quando usado remotamente, um objeto deste tipo seria proxiado.

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

Note

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

Notas para Implementadores

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

Métodos

Name Description
GetObjectData(SerializationInfo, StreamingContext)

Preenche a SerializationInfo com os dados necessários para serializar o objeto alvo.

Aplica-se a

Ver também