ISerializable Interface
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
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.
Nota
Essa interface não se aplica à serialização JSON usando System.Text.Json.
Implemente essa interface para permitir que um objeto participe de sua própria serialização e desserialização.
Get |
Obsoleto.
Popula um SerializationInfo com os dados necessários para serializar o objeto de destino. |
Produto | Versões |
---|---|
.NET | Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9 |
.NET Framework | 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
.NET Standard | 2.0, 2.1 |
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários: