Code-Beispiel
Ein Beispiel zum Einsatz der Klasse System.Runtime.Serialization.Formatters.Binary.BinaryFormatter aus der .NET-Klassenbibliothek.
Autor: Dr. Holger Schwichtenberg
Beschreibung
Der binäre Serialisierer wandelt ein beliebiges Objekt bzw. eine Objekthierarchie in eine binäre Zeichenfolge um. Zirkuläre Referenzen in Objekthierarchien erkennt der Serialisierer und verarbeitet diese korrekt.
Für die folgenden Unterroutinen wird neben dem Namespace System.Runtime.Serialization.Formatters.Binary auch der Namespace System.IO benötigt, da die serialisierten Objekte in einer Textdatei persistent gemacht und später von dort wieder gelesen werden.
Für die Serialisierung wird nur ein einziger Methodenaufruf benötigt: Serialize() erwartet im ersten Parameter ein Stream-Objekt (ein Objekt einer Klasse, die von System.IO.Stream abgeleitet ist, z.B. FileStream, MemoryStream, NetworkStream, CryptoStream, BufferedStream) und im zweiten Parameter das zu serialisierende Objekt. Als Stream wird in der folgenden Unterroutine eine Datei verwendet. bin_serialize() kapselt diese Funktionalität.
Auch für die Deserialisierung ist nur ein Methodenaufruf notwendig. Deserialize() erzeugt aus einem übergebenen Stream ein Objekt, ggf. mit allen Unterobjekten.
Der parameterlose Konstruktor wird beim Deserialisieren nicht aufgerufen!
Serialisieren in Binärdatei
In dem folgenden Listing wird mit der FileStream-Klasse in eine Datei serialisiert (persistent gemacht).
Programmcodebeispiele Visual Basic .NET (VB.NET)
' --- Serialisieren in Binärdatei
Sub bin_serialize(ByVal o, ByVal datei)
Dim form As New BinaryFormatter()
Dim stream As FileStream
stream = New FileStream(datei, _
FileMode.Create, FileAccess.Write, _
FileShare.None)
form.Serialize(stream, o)
stream.Close()
out("Objekt wurde gespeichert in " & datei)
End Sub
Programmcodebeispiele CSharp (C#)
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Runtime.Serialization;
using System.IO;
using System.Xml.Serialization;
using System.Xml;
using System.Data;
namespace FCLBuch._System_RuntimeSerialization {
// Hilfsfunktionen für Serialisierung
public class SerializationHelper {
public static object Bin_Deserialize(string datei) {
// Deserialisieren aus einer Binärdatei
BinaryFormatter form = new BinaryFormatter();
FileStream stream = new FileStream(datei, FileMode.Open);
object o = form.Deserialize(stream);
stream.Close();
FclOutput.PrintOut("Objekt wurde geladen aus " + datei);
return o;
}
}
}
Hinweise
Ausgaben werden in den Beispielen durch Hilfsroutinen wie out() und
PrintOut() erzeugt. Diese sind hier nicht angegeben, da deren Implementierung
von der jeweiligen Umgebung abhängt. Für Konsolenanwendungen können hier z.B.
Console.WriteLine() einsetzen.
Querverweise
Liste aller Codebeispiele
Definition '.NET Framework Class Library'
Verfügbarkeit der Klasse 'System.Runtime.Serialization.Formatters.Binary.BinaryFormatter'
Übersicht über den FCL-Namensraum 'System.Runtime.Serialization.Formatters.Binary'
.NET & Visual Studio Community Portal