ISerializable Interface
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 sealed
for .
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. |