Serialisierung (C#)Serialization (C# )

Serialisierung ist der Prozess der Konvertierung eines Objekts in einen Stream von Bytes zum Speichern des Objekts oder zum Übertragen in den Arbeitsspeicher, eine Datenbank oder eine Datei.Serialization is the process of converting an object into a stream of bytes in order to store the object or transmit it to memory, a database, or a file. Hauptzweck ist es, den Zustand eines Objekts zu speichern, um es bei Bedarf neu erstellen zu können.Its main purpose is to save the state of an object in order to be able to recreate it when needed. Der umgekehrte Vorgang wird als Deserialisierung bezeichnet.The reverse process is called deserialization.

Funktionsweise der SerialisierungHow Serialization Works

Diese Abbildung zeigt den gesamten Ablauf der Serialisierung.This illustration shows the overall process of serialization.

Grafik zur SerialisierungSerialization Graphic

Das Objekt wird in einen Stream serialisiert, der nicht nur die Daten, sondern auch Informationen über den Typ des Objekts enthält, wie z.B. Version, Kultur und Assemblyname.The object is serialized to a stream, which carries not just the data, but information about the object's type, such as its version, culture, and assembly name. Aus diesem Stream kann das Objekt in einer Datenbank, einer Datei oder einem Arbeitsspeicher gespeichert werden.From that stream, it can be stored in a database, a file, or memory.

Verwendungszwecke der SerialisierungUses for Serialization

Mit der Serialisierung kann der Entwickler den Zustand eines Objekts speichern und das Objekt bei Bedarf neu erstellen. Die Serialisierung stellt sowohl Objektspeicher als auch Datenaustausch bereit.Serialization allows the developer to save the state of an object and recreate it as needed, providing storage of objects as well as data exchange. Über die Serialisierung kann ein Entwickler verschiedene Aktionen durchführen, wie z.B.: Senden des Objekts an eine Remoteanwendung mithilfe eines Webdiensts, Übergeben eines Objekts von einer Domäne an eine andere, Übergeben eines Objekts über eine Firewall als XML-Zeichenfolge oder anwendungsübergreifendes Verwalten der Sicherheit oder benutzerspezifischer Informationen.Through serialization, a developer can perform actions like sending the object to a remote application by means of a Web Service, passing an object from one domain to another, passing an object through a firewall as an XML string, or maintaining security or user-specific information across applications.

Aktivieren der Serialisierbarkeit eines ObjektsMaking an Object Serializable

Zum Serialisieren eines Objekts benötigen Sie das entsprechende Objekt, einen Stream, der das serialisierte Objekt enthält und einen Formatter.To serialize an object, you need the object to be serialized, a stream to contain the serialized object, and a Formatter. System.Runtime.Serialization enthält die Klassen, die zum Serialisieren und Deserialisieren von Objekten nötig sind.System.Runtime.Serialization contains the classes necessary for serializing and deserializing objects.

Wenden Sie das Attribut SerializableAttribute auf einen Typ an, um anzugeben, dass Instanzen dieses Typs serialisiert werden können.Apply the SerializableAttribute attribute to a type to indicate that instances of this type can be serialized. Eine Ausnahme SerializationException wird ausgelöst, wenn Sie versuchen zu serialisieren, aber der Typ nicht über das Attribut SerializableAttribute verfügt.A SerializationException exception is thrown if you attempt to serialize but the type does not have the SerializableAttribute attribute.

Wenn Sie nicht möchten, dass ein Feld innerhalb Ihrer Klasse serialisierbar ist, wenden Sie das Attribut NonSerializedAttribute an.If you do not want a field within your class to be serializable, apply the NonSerializedAttribute attribute. Wenn ein Feld eines serialisierbaren Typs einen Zeiger, ein Handle oder eine andere Datenstruktur enthält, der/die für eine bestimmte Umgebung spezifisch ist, und das Feld in keiner anderen Umgebung sinnvoll wiederhergestellt werden kann, sollten Sie den Typ als nicht serialisierbar markieren.If a field of a serializable type contains a pointer, a handle, or some other data structure that is specific to a particular environment, and the field cannot be meaningfully reconstituted in a different environment, then you may want to make it nonserializable.

Wenn eine serialisierte Klasse Verweise auf Objekte anderer Klassen enthält, die mit SerializableAttribute markiert sind, werden diese Objekte ebenfalls serialisiert.If a serialized class contains references to objects of other classes that are marked SerializableAttribute, those objects will also be serialized.

Binär- und XML-SerialisierungBinary and XML Serialization

Es kann entweder Binär- oder XML-Serialisierung verwendet werden.Either binary or XML serialization can be used. Bei der binären Serialisierung werden alle Member einschließlich der schreibgeschützten Member serialisiert, und die Leistung wird verbessert.In binary serialization, all members, even those that are read-only, are serialized, and performance is enhanced. Die XML-Serialisierung bietet besser lesbaren Code sowie größere Flexibilität bei der Objektfreigabe und -nutzung zu Interoperabilitätszwecken.XML serialization provides more readable code, as well as greater flexibility of object sharing and usage for interoperability purposes.

Binäre SerialisierungBinary Serialization

Die binäre Serialisierung verwendet zum Generieren einer kompakten Serialisierung die binäre Codierung für den Speicher oder für socketbasierte Netzwerkstreams.Binary serialization uses binary encoding to produce compact serialization for uses such as storage or socket-based network streams.

XML-SerialisierungXML Serialization

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-Dokument (XML Schema Definition) entspricht.XML serialization serializes the public fields and properties of an object, or the parameters and return values of methods, into an XML stream that conforms to a specific XML Schema definition language (XSD) document. Die XML-Serialisierung führt zu stark typisierten Klassen mit öffentlichen Eigenschaften und Feldern, die in XML konvertiert werden.XML serialization results in strongly typed classes with public properties and fields that are converted to XML. System.Xml.Serialization enthält die Klassen, die zum Serialisieren und Deserialisieren in XML nötig sind.System.Xml.Serialization contains the classes necessary for serializing and deserializing XML.

Sie können Attribute auf Klassen und Klassenmember anwenden, um die Art der Serialisierung oder Deserialisierung einer Instanz der Klasse durch XmlSerializer zu steuern.You can apply attributes to classes and class members in order to control the way the XmlSerializer serializes or deserializes an instance of the class.

Einfache und benutzerdefinierte SerialisierungBasic and Custom Serialization

Die Serialisierung kann auf zwei Arten ausgeführt werden: einfach und benutzerdefiniert.Serialization can be performed in two ways, basic and custom. Die einfache Serialisierung verwendet .NET Framework, um ein Objekt automatisch zu serialisieren.Basic serialization uses the .NET Framework to automatically serialize the object.

Einfache SerialisierungBasic Serialization

Die einzige Anforderung bei der einfachen Serialisierung ist, dass das Attribut SerializableAttribute auf das Objekt angewendet wurde.The only requirement in basic serialization is that the object has the SerializableAttribute attribute applied. Das Attribut NonSerializedAttribute kann verwendet werden, um die Serialisierung bestimmter Felder zu verhindern.The NonSerializedAttribute can be used to keep specific fields from being serialized.

Wenn Sie die einfache Serialisierung verwenden, kann die Versionsverwaltung von Objekten zu Problemen führen. In diesem Fall empfiehlt sich die benutzerdefinierte Serialisierung.When you use basic serialization, the versioning of objects may create problems, in which case custom serialization may be preferable. Die einfache Serialisierung ist die einfachste Möglichkeit zur Serialisierung, bietet allerdings nicht viel Steuerungsmöglichkeiten für den Prozess.Basic serialization is the easiest way to perform serialization, but it does not provide much control over the process.

Benutzerdefinierte SerialisierungCustom Serialization

Bei der benutzerdefinierten Serialisierung können Sie genau angeben, welche Objekte serialisiert werden und wie die Serialisierung erfolgt.In custom serialization, you can specify exactly which objects will be serialized and how it will be done. Die Klasse muss als SerializableAttribute markiert und in die ISerializable-Schnittstelle implementiert sein.The class must be marked SerializableAttribute and implement the ISerializable interface.

Wenn das Objekt auch benutzerdefiniert deserialisiert werden soll, müssen Sie einen benutzerdefinierten Konstruktor verwenden.If you want your object to be deserialized in a custom manner as well, you must use a custom constructor.

DesignerserialisierungDesigner Serialization

Die Designerserialisierung ist eine besondere Form der Serialisierung, die auch die Art der Objektpersistenz einbezieht, die in der Regel mit Entwicklungstools verknüpft ist.Designer serialization is a special form of serialization that involves the kind of object persistence usually associated with development tools. Bei der Designerserialisierung handelt es sich um den Prozess der Konvertierung eines Objektdiagramms in eine Quelldatei, die später zum Wiederherstellen des Objektdiagramms verwendet werden kann.Designer serialization is the process of converting an object graph into a source file that can later be used to recover the object graph. Eine Quelldatei kann Code-, Markup- oder sogar SQL-Tabelleninformationen enthalten.A source file can contain code, markup, or even SQL table information.

Verwandte Themen und BeispieleRelated Topics and Examples

Walkthrough: Persisting an Object in Visual Studio (C#) (Exemplarische Vorgehensweise: Beibehalten eines Objekts in Visual Studio (C#))Walkthrough: Persisting an Object in Visual Studio (C#)
Veranschaulicht, wie die Serialisierung verwendet werden kann, um die Daten eines Objekts zwischen Instanzen beizubehalten. Dadurch können Sie Werte speichern und abrufen, wenn das Objekt das nächste Mal instanziiert wird.Demonstrates how serialization can be used to persist an object's data between instances, allowing you to store values and retrieve them the next time the object is instantiated.

How to: Read Object Data from an XML File (C#) (Vorgehensweise: Lesen von Objektdaten aus einer XML-Datei (C#))How to: Read Object Data from an XML File (C#)
Zeigt, wie Objektdaten gelesen werden, die zuvor mithilfe der XmlSerializer-Klasse in eine XML-Datei geschrieben wurden.Shows how to read object data that was previously written to an XML file using the XmlSerializer class.

How to: Write Object Data to an XML File (C#) (Vorgehensweise: Schreiben von Objektdaten in eine XML-Datei (C#))How to: Write Object Data to an XML File (C#)
Zeigt, wie ein Objekt aus einer Klasse mithilfe der XmlSerializer-Klasse in eine XML-Datei geschrieben wird.Shows how to write the object from a class to an XML file using the XmlSerializer class.