Share via


Grundlagen der Serialisierung in .NET Framework

Aktualisiert: November 2007

Bei der Serialisierung wird ein Objekt in einen Stream von Bytes umgewandelt, um das Objekt im Speicher, einer Datenbank oder einer Datei beizubehalten. Dies geschieht hauptsächlich, um den Zustand des Objekts zu speichern, damit dieses später bei Bedarf wiederhergestellt werden kann. Der umgekehrte Vorgang wird als Deserialisierung bezeichnet.

Ablauf der Serialisierung

In dieser Abbildung ist der Ablauf der Serialisierung dargestellt.

Der serialisierte Stream enthält nicht nur die Daten für das Objekt, sondern auch Informationen zu dessen Typ, beispielsweise zur Version, zur Kultur und zum Assemblynamen. Mithilfe dieses Streams kann das Objekt in einer Datenbank, einer Datei oder im Arbeitsspeicher gespeichert werden.

Verwendungsmöglichkeiten für die Serialisierung

Durch Serialisierung kann der Zustand eines Objekts gespeichert und dieses bei Bedarf wiederhergestellt werden. Dieses Verfahren kann sowohl für die Speicherung von Objekten als auch für den Datenaustausch eingesetzt werden. Serialisierung ermöglicht es beispielsweise, ein Objekt über einen Webservice an eine Remoteanwendung zu senden, von einer Domäne an eine andere zu übergeben, als XML-Zeichenfolge durch eine Firewall zu leiten oder sicherheits- und benutzerabhängige Informationen anwendungsübergreifend beizubehalten.

Konfigurieren eines Objekts als serialisierbares Objekt

Für das Serialisieren eines Objekts wird das zu serialisierende Objekt, ein Stream und ein Formatter benötigt. System.Runtime.Serialization enthält die zum Serialisieren und Deserialisieren von Objekten benötigten Klassen.

Wenden Sie das SerializableAttribute-Attribut auf einen Typ an, um anzugeben, dass Instanzen dieses Typs serialisiert werden können. Wenn der Typ nicht über das SerializableAttribute-Attribut verfügt, wird beim Versuch einer Serialisierung eine SerializationException-Ausnahme ausgelöst.

Wenn ein bestimmtes Feld innerhalb einer Klasse nicht serialisierbar sein soll, wenden Sie das NonSerializedAttribute-Attribut an. Wenn ein Feld eines serialisierbaren Typs einen Zeiger, ein Handle oder eine andere Datenstruktur enthält, die für eine bestimmte Umgebung spezifisch ist und in einer anderen Umgebung nicht sinnvoll ersetzt werden kann, ist es ratsam, das betreffende Feld als nicht serialisierbar zu kennzeichnen.

Wenn eine serialisierte Klasse Verweise auf Objekte anderer Klassen enthält, die mit SerializableAttribute gekennzeichnet sind, werden diese Objekte ebenfalls serialisiert.

Binäre Serialisierung und XML-Serialisierung

Sie können sowohl binäre Serialisierung als auch XML-Serialisierung verwenden. Bei der binären Serialisierung werden alle Member (auch schreibgeschützte Member) serialisiert, und es kann eine höhere Leistung genutzt werden. Die XML-Serialisierung bietet hingegen einen lesbareren Code sowie eine höhere Flexibilität bei der gemeinsamen Nutzung von Objekten und beim Datenaustausch.

Binäre Serialisierung

Bei der Binärserialisierung wird durch eine binäre Codierung ein kompaktes Format erzeugt, das besonders für die Speicherung und für socketbasierte Netzwerkstreams geeignet ist. Diese Variante der Serialisierung ist nicht dafür geeignet, Daten durch eine Firewall zu leiten, bietet aber eine bessere Leistung beim Speichern von Daten.

XML-Serialisierung

Bei der XML-Serialisierung werden die öffentlichen Felder und Eigenschaften eines Objekts bzw. die Parameter und Rückgabewerte von Methoden in einen XML-Stream serialisiert, der einem bestimmtem XSD (XML Schema Definition)-Dokument entspricht. XML-Serialisierung führt zu stark typisierten Klassen mit öffentlichen Eigenschaften und Feldern, die in XML konvertiert werden. System.Xml.Serialization enthält die notwendigen Klassen für die XML-Serialisierung und -Deserialisierung.

Sie können Attribute auf Klassen und Klassenmembern anwenden, um festzulegen, wie XmlSerializer Instanzen dieser Klasse serialisiert bzw. deserialisiert. Weitere Informationen finden Sie unter Steuern der XML-Serialisierung mit Attributen und unter Attribute zur Steuerung der XML-Serialisierung.

In dieser Tabelle werden Aufgaben im Zusammenhang mit der XML-Serialisierung aufgelistet:

Zweck

Thema

Serialisieren eines Objekts

Gewusst wie: Serialisieren eines Objekts

Deserialisieren eines Objekts

Gewusst wie: Deserialisieren eines Objekts

Generieren von Klassen und XML-Schema-Dokumentation

Gewusst wie: Mit dem XML Schema Definition-Tool Klassen und XML-Schemadokumente generieren

Qualifizieren von XML-Elementnamen und XML-Attributnamen

Gewusst wie: Qualifizieren von XML-Element- und XML-Attributnamen

Angeben eines alternativen Elementnamens für einen XML-Stream

Gewusst wie: Angeben eines alternativen Elementnamens für einen XML-Stream

Festlegen der Serialisierung von abgeleiteten Klassen

Gewusst wie: Steuern der Serialisierung abgeleiteter Klassen

SOAP-Serialisierung

Durch XML-Serialisierung können auch Objekte in XML-Streams serialisiert werden, die der SOAP-Spezifikation entsprechen. SOAP ist ein auf XML basierendes Protokoll, das speziell für die Weitergabe von Prozeduraufrufen unter Verwendung von XML entwickelt wurde. Ebenso wie bei der regulären XML-Serialisierung können diese Attribute auch verwendet werden, um die durch einen XML-Webdienst generierten literalen SOAP-Meldungen zu steuern. Weitere Informationen finden Sie unter XML-Serialisierung mit XML-Webdiensten und unter Attribute zur Steuerung der Serialisierung von codiertem SOAP.

In dieser Tabelle werden Aufgaben im Zusammenhang mit der SOAP-codierten XML-Serialisierung aufgelistet:

Zweck

Thema

Serialisieren eines Objekts als SOAP-codierter XML-Stream

Gewusst wie: Serialisieren eines Objekts als SOAP-codierter XML-Stream

Überschreiben von SOAP-codierter XML-Serialisierung

Gewusst wie: Überschreiben von codierter SOAP-XML-Serialisierung

Einfache und benutzerdefinierte Serialisierung

Für die Serialisierung stehen zwei Varianten zur Verfügung: einfache Serialisierung und benutzerdefinierte Serialisierung. Bei der einfachen Serialisierung wird das Objekt mithilfe von .NET Framework automatisch serialisiert.

Einfache Serialisierung

Die einzige Anforderung bei der einfachen Serialisierung besteht darin, dass das SerializableAttribute-Attribut auf das Objekt angewendet wurde. Mit NonSerializedAttribute können einzelne Felder von der Serialisierung ausgeschlossen werden.

Bei der einfachen Serialisierung kann die Verwendung verschiedener Objektversionen zu Problemen führen. In diesem Fall empfiehlt es sich, die benutzerdefinierte Serialisierung zu verwenden. Die einfache Serialisierung ist leicht verwendbar, bietet aber nur wenige Möglichkeiten zur Steuerung des Serialisierungsvorgangs.

Benutzerdefinierte Serialisierung

Bei der benutzerdefinierten Serialisierung können Sie genau angeben, welche Objekte serialisiert werden und wie die Serialisierung ausgeführt wird. Hierfür muss die betreffende Klasse mit dem SerializableAttribute gekennzeichnet sein und die ISerializable-Schnittstelle implementieren.

Wenn das Objekt ebenfalls benutzerdefiniert deserialisiert werden soll, müssen Sie einen benutzerdefinierten Konstruktor verwenden.

Designerserialisierung

Die Designerserialisierung ist eine spezielle Form der Serialisierung, bei der die Art von Objektdauerhaftigkeit verwendet wird, die im Allgemeinen bei Entwicklungstools verwendet wird. Bei der Designerserialisierung wird ein Objektdiagramm in eine Quelldatei konvertiert, die später für die Wiederherstellung des Objektdiagramms verwendet werden kann. Eine Quelldatei kann Code, Markup und sogar SQL-Tabelleninformationen enthalten. Weitere Informationen finden Sie unter Übersicht über die Designerserialisierung.

Siehe auch

Aufgaben

Gewusst wie: Segmentieren serialisierter Daten

Konzepte

Beispiele für die XML-Serialisierung

Für die Serialisierung in .NET Framework verwendete Klassen