ISerializable Interface
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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. |