ISerializable Rozhraní
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Umožňuje objektu řídit jeho 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
Každá třída, která může být serializována pomocí binárního nebo XML serializace musí být označena SerializableAttributepomocí . Pokud třída potřebuje řídit svůj binární nebo XML serializace proces, může implementovat ISerializable rozhraní. GetObjectData Volání Formatter v čase serializace a naplní dodanou SerializationInfo všechna data potřebná k reprezentaci objektu. Objekt Formatter vytvoří SerializationInfo typ objektu v grafu. Objekty, které potřebují odesílat proxy servery pro sebe, můžou ke změně přenášených informací použít FullTypeName metody SerializationInfo a AssemblyName .
V případě dědičnosti třídy je možné serializovat třídu, která je odvozena ze základní třídy, která implementuje ISerializable. V tomto případě by odvozená třída měla volat implementaci GetObjectData základní třídy 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 data v souboru SerializationInfo byla deserializována formátovacím nástrojem. 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 obejít implementací IDeserializationCallback
rozhraní a OnDeserialization
metody .
Architektura serializace zpracovává typy objektů, které rozšiřují MarshalByRefObject stejné jako typy, které rozšiřují Object. Tyto typy lze označit pomocí SerializableAttribute a implementovat ISerializable rozhraní jako jakýkoli jiný typ objektu. Stav jejich objektu se zaznamená a uloží do datového proudu.
Při použití těchto typů prostřednictvím System.Runtime.Remotingnástroje poskytuje infrastruktura vzdálené komunikace náhradu, která předchází typické serializaci a místo toho serializuje proxy server do .MarshalByRefObject Náhradní je pomocník, který ví, jak serializovat a deserializovat objekty určitého typu. Proxy server, který uživatel ve většině případů nevidí, 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 by to mohlo být použitelné, je .MemoryStream Zatímco základní třída MemoryStream (Stream) se rozšiřuje z MarshalByRefObject, je možné zachytit stav objektu MemoryStream a obnovit ho podle své vůle. Proto může být smysluplné serializovat stav tohoto streamu do databáze a později ho obnovit. Při použití prostřednictvím vzdálené komunikace by však objekt tohoto typu byl proxy.
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.
Poznámka
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
GetObjectData(SerializationInfo, StreamingContext) |
Zastaralé.
Naplní SerializationInfo objekt daty potřebnými k serializaci cílového objektu. |