Serialisierung (C# und Visual Basic)
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
Zum Serialisieren eines Objekts benötigen Sie das Objekt, das serialisiert werden soll, einen Stream, der das serialisierte Objekt enthält, und ein Formatter-Element. System.Runtime.Serialization enthält die für das Serialisieren und Deserialisieren von Objekten erforderlichen 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.
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. Die 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.
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.
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 in der Anwendung des SerializableAttribute-Attributs auf das Objekt. 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.
Verwandte Themen
Exemplarische Vorgehensweise: Beibehalten eines Objekts (C# und Visual Basic)
Demonstriert, wie Daten eines Objekts mittels der Serialisierung zwischen Instanzen beibehalten werden. Dadurch können Sie Werte speichern und sie bei der nächsten Instanziierung des Objekts abrufen.Gewusst wie: Lesen von Objektdaten aus einer XML-Datei (C# und Visual Basic)
Veranschaulicht, wie Objektdaten gelesen werden, die zuvor mithilfe der XmlSerializer-Klasse in eine XML-Datei geschrieben wurden.Gewusst wie: Schreiben von Objektdaten in eine XML-Datei (C# und Visual Basic)
Veranschaulicht, wie das Objekt mit der XmlSerializer-Klasse aus einer Klasse in eine XML-Datei geschrieben wird.