ISerializable Rozhraní

Definice

Umožňuje objektu řídit vlastní serializace a deserializace prostřednictvím binární a XML serializace.

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
Odvozené
Atributy

Poznámky

Všechny třídy, které mohou být serializovány pomocí binární nebo XML serializace musí být označeny SerializableAttribute. Pokud třída potřebuje řídit svůj binární nebo XML serializace procesu, může implementovat ISerializable rozhraní. Volání Formatter v GetObjectData době serializace a naplní dodané SerializationInfo všemi daty potřebnými k reprezentaci objektu. Vytvoří Formatter typ SerializationInfo objektu v grafu. Objekty, které potřebují odesílat proxy pro sebe, mohou použít FullTypeName a AssemblyName metody SerializationInfo ke změně přenášených informací.

V případě dědičnosti tříd je možné serializovat třídu, která je odvozena od základní třídy, která implementuje ISerializable. V tomto případě by odvozená třída měla volat základní třídu implementace GetObjectData uvnitř své implementace GetObjectData. V opačném případě nebudou data ze základní třídy serializována.

Rozhraní ISerializable implikuje konstruktor s podpisem constructor (SerializationInfo information, StreamingContext context). V době deserializace je aktuální konstruktor volán pouze po deserializaci dat v SerializationInfo rekonstruktoru. Obecně platí, že tento konstruktor by měl být protected , pokud třída není sealed.

Pořadí, ve kterém jsou objekty deserializovány, nelze zaručit. Pokud například jeden typ odkazuje na typ, který ještě nebyl deserializován, dojde k výjimce. Pokud vytváříte typy, které mají takové závislosti, můžete problém vyřešit implementací IDeserializationCallback rozhraní a OnDeserialization metody.

Architektura serializace zpracovává typy objektů, které rozšiřují MarshalByRefObject stejné typy jako typy, které rozšiřují Object. Tyto typy lze označit SerializableAttribute a implementovat rozhraní jako jakýkoli jiný typ objektu ISerializable . Jejich stav objektu se zachytí a zachytí do datového proudu.

Při použití System.Runtime.Remotingtěchto typů prostřednictvím , remoting infrastruktura poskytuje náhradní, která předpyší typické serializace a místo toho serializuje proxy na MarshalByRefObject. Náhradní je pomocník, který ví, jak serializovat a deserializovat objekty určitého typu. Proxy, neviditelný pro uživatele ve většině případů, bude typu ObjRef.

Jako obecný vzor návrhu by bylo neobvyklé, aby třída byla označena serializovatelným atributem a rozšířit MarshalByRefObject. Vývojáři by měli pečlivě zvážit možné scénáře serializace a vzdálené komunikace při kombinování těchto dvou charakteristik. Jedním z příkladů, kde to může být použitelné, je s MemoryStream. I když se základní třída MemoryStream (Stream) rozšiřuje od MarshalByRefObject, je možné zachytit stav a MemoryStream obnovit ho podle vůle. Proto může být smysluplné serializovat stav tohoto datového proudu do databáze a obnovit ho později v čase. Při použití prostřednictvím vzdálené komunikace by však byl objekt tohoto typuxiován.

Další informace o serializaci tříd, které rozšiřují MarshalByRefObject, naleznete v tématu RemotingSurrogateSelector. Další informace o implementaci ISerializablenaleznete v tématu Vlastní serializace.

Note

Toto rozhraní se nevztahuje na serializaci JSON pomocí System.Text.Json.

Poznámky pro implementátory

Implementujte toto rozhraní, aby se objekt mohl účastnit vlastní serializace a deserializace.

Metody

Name Description
GetObjectData(SerializationInfo, StreamingContext)
Zastaralé.

Naplní SerializationInfo data potřebná k serializaci cílového objektu.

Platí pro

Viz také