ISerializable Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ermöglicht es einem Objekt, seine eigene Serialisierung und Deserialisierung durch binäre und XML-Serialisierung zu steuern.
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
- Abgeleitet
- Attribute
Hinweise
Jede Klasse, die mit binärer oder XML-Serialisierung serialisiert werden kann, muss mit der SerializableAttribute Wenn eine Klasse den binären oder XML-Serialisierungsprozess steuern muss, kann sie die ISerializable Schnittstelle implementieren. Die Formatter Aufrufe der GetObjectData Serialisierungszeit und füllen die bereitgestellten SerializationInfo Daten auf, die zum Darstellen des Objekts erforderlich sind. Das Formatter Objekt wird mit dem Typ des Objekts im Diagramm erstellt SerializationInfo . Objekte, die Proxys für sich selbst senden müssen, können die übertragenen Informationen mithilfe der FullTypeName Methoden AssemblyName und Methoden SerializationInfo ändern.
Im Falle der Klassenvererbung ist es möglich, eine Klasse zu serialisieren, die von einer Basisklasse abgeleitet wird, die implementiert ISerializablewird. In diesem Fall sollte die abgeleitete Klasse die Basisklassenimplementierung innerhalb der Implementierung von GetObjectDataGetObjectDataaufrufen. Andernfalls werden die Daten aus der Basisklasse nicht serialisiert.
Die ISerializable Schnittstelle impliziert einen Konstruktor mit der Signatur constructor (SerializationInfo information, StreamingContext context). Zur Deserialisierungszeit wird der aktuelle Konstruktor erst aufgerufen, nachdem die Daten im SerializationInfo Formatierer deserialisiert wurden. Im Allgemeinen sollte dieser Konstruktor sein protected , wenn die Klasse nicht sealedist.
Die Reihenfolge, in der Objekte deserialisiert werden, kann nicht garantiert werden. Wenn beispielsweise ein Typ auf einen Typ verweist, der noch nicht deserialisiert wurde, tritt eine Ausnahme auf. Wenn Sie Typen erstellen, die über solche Abhängigkeiten verfügen, können Sie das Problem umgehen, indem Sie die IDeserializationCallback Schnittstelle und die OnDeserialization Methode implementieren.
Die Serialisierungsarchitektur behandelt Objekttypen, die dasselbe erweitern MarshalByRefObject wie Typen, die erweitert werden Object. Diese Typen können mit der SerializableAttribute Schnittstelle als beliebiger anderer Objekttyp gekennzeichnet und implementiert ISerializable werden. Der Objektzustand wird erfasst und im Datenstrom beibehalten.
Wenn diese Typen über System.Runtime.Remotingverwendet werden, stellt die Remotinginfrastruktur eine Ersatzlösung bereit, die eine typische Serialisierung vorausnimmt und stattdessen einen Proxy in den MarshalByRefObjectserialisiert. Ein Ersatz ist ein Hilfsprogramm, das weiß, wie Objekte eines bestimmten Typs serialisiert und deserialisiert werden. Der Proxy, der für den Benutzer in den meisten Fällen unsichtbar ist, ist vom Typ ObjRef.
Als allgemeines Entwurfsmuster wäre es ungewöhnlich, dass eine Klasse mit dem serialisierbaren Attribut gekennzeichnet und erweitert MarshalByRefObjectwird. Entwickler sollten bei der Kombination dieser beiden Merkmale sorgfältig über die möglichen Serialisierungs- und Remotingszenarien nachdenken. Ein Beispiel, in dem dies anwendbar sein kann, ist mit einem MemoryStream. Die Basisklasse von MemoryStream (Stream) erstreckt sich zwar von MarshalByRefObject, aber es ist möglich, den Zustand eines Und MemoryStream wiederherzustellen. Daher kann es sinnvoll sein, den Zustand dieses Datenstroms in eine Datenbank zu serialisieren und zu einem späteren Zeitpunkt wiederherzustellen. Wenn ein Objekt dieses Typs jedoch durch Remoting verwendet wird, wäre ein Objekt dieses Typs proxied.
Weitere Informationen zur Serialisierung von Klassen, die erweitert werden MarshalByRefObject, finden Sie unter RemotingSurrogateSelector. Weitere Informationen zur Implementierung ISerializablefinden Sie unter "Benutzerdefinierte Serialisierung".
Note
Diese Schnittstelle gilt nicht für die JSON-Serialisierung mit System.Text.Json.
Hinweise für Ausführende
Implementieren Sie diese Schnittstelle, damit ein Objekt an der eigenen Serialisierung und Deserialisierung teilnehmen kann.
Methoden
| Name | Beschreibung |
|---|---|
| GetObjectData(SerializationInfo, StreamingContext) |
Füllt eine SerializationInfo mit den Daten auf, die zum Serialisieren des Zielobjekts erforderlich sind. |