Teilen über


ISerializable Schnittstelle

Definition

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 mithilfe der binären oder XML-Serialisierung serialisiert werden kann, muss mit SerializableAttributegekennzeichnet werden. Wenn eine Klasse ihren binären oder XML-Serialisierungsprozess steuern muss, kann sie die ISerializable Schnittstelle implementieren. Der Namespace Formatter ruft GetObjectData während der Serialisierung auf und füllt die angegebene SerializationInfo mit allen Daten auf, die zur Darstellung des Objekts erforderlich sind. Der Formatter erstellt eine SerializationInfo mit dem Typ des Objekts im Diagramm. Objekte, die Proxys für sich selbst senden müssen, können die Methoden FullTypeName und AssemblyName unter SerializationInfo verwenden, um die übermittelten Informationen zu ändern.

Im Fall der Klassenvererbung ist es möglich, eine Klasse zu serialisieren, die von einer Basisklasse abgeleitet wird, die implementiert ISerializable. In diesem Fall sollte die abgeleitete Klasse die Basisklassenimplementierung von innerhalb ihrer GetObjectData Implementierung von GetObjectDataaufrufen. 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 in vom 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 mit solchen Abhängigkeiten erstellen, können Sie das Problem umgehen, indem Sie die IDeserializationCallback Schnittstelle und die OnDeserialization Methode implementieren.

Die Serialisierungsarchitektur behandelt Objekttypen, die dasselbe wie Typen erweitern MarshalByRefObject , die erweitern Object. Diese Typen können mit dem SerializableAttribute markiert werden und die ISerializable Schnittstelle als jeden anderen Objekttyp implementieren. Ihr Objektzustand wird erfasst und im Stream beibehalten.

Wenn diese Typen über System.Runtime.Remotingverwendet werden, stellt die Remotinginfrastruktur eine Ersatzlösung bereit, die die typische Serialisierung ausrottet und stattdessen einen Proxy an die MarshalByRefObjectserialisiert. Ein Ersatz ist ein Hilfsprogramm, das weiß, wie Objekte eines bestimmten Typs serialisiert und deserialisiert werden. Der Für den Benutzer in den meisten Fällen unsichtbare Proxy ist vom Typ ObjRef.

Als allgemeines Entwurfsmuster ist es ungewöhnlich, dass eine Klasse sowohl mit dem serialisierbaren Attribut gekennzeichnet ist als auch erweitern MarshalByRefObjectwürde. Entwickler sollten bei der Kombination dieser beiden Merkmale sorgfältig über die möglichen Serialisierungs- und Remotingszenarien nachdenken. Ein Beispiel, in dem dies zutrifft, ist mit .MemoryStream Während die Basisklasse von MemoryStream (Stream) von MarshalByRefObjecterweitert wird, ist es möglich, den Zustand eines MemoryStream zu erfassen und nach Be willen wiederherzustellen. Daher kann es sinnvoll sein, den Status dieses Datenstroms in eine Datenbank zu serialisieren und zu einem späteren Zeitpunkt wiederherzustellen. Wenn sie jedoch über Remoting verwendet wird, wird ein Objekt dieses Typs proxied.

Weitere Informationen zur Serialisierung von Klassen, die erweitern MarshalByRefObject, finden Sie unter RemotingSurrogateSelector. Weitere Informationen zur Implementierung ISerializablefinden Sie unter Benutzerdefinierte Serialisierung.

Hinweis

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 seiner eigenen Serialisierung und Deserialisierung teilnehmen kann.

Methoden

GetObjectData(SerializationInfo, StreamingContext)
Veraltet.

Füllt eine SerializationInfo mit den Daten auf, die zum Serialisieren des Zielobjekts erforderlich sind.

Gilt für:

Weitere Informationen