Schritt 1: Erstellt eine Klasse, und markiert sie als serialisierbar.
[Serializable]
class BinaryExample
{
public int Height { get; set; }
public int Width { get; set; }
public byte[] Values { get; set; }
}
Schritt 2: Serialisieren und speichern
//using System.Runtime.Serialization.Formatters.Binary; - mscorlib.dll
var fileName = "example.bin";
using (var stream = File.Open(fileName, FileMode.Create))
{
var binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(stream, example);
}
Schritt 3: Laden und deserialisieren
BinaryExample loadedExample;
using (var stream = File.Open("example.bin", FileMode.Open))
{
var binaryFormatter = new BinaryFormatter();
loadedExample = (BinaryExample)binaryFormatter.Deserialize(stream);
}
Schlagwörter: binär, Serialisierung, Deserialisierung, Datei speichern
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
Eine kleine Ergänzung von mir....
Felder die nicht serialisiert werden können kann man so ausschließen:
[Serializable]
class BinaryExample
{
[field: NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
public int Height { get; set; }
public int Width { get; set; }
public byte[] Values { get; set; }
}
Gruß
Christoph
Abstrakta dazu:
BinaryFormatter
erfordert als [Serializable]
-attributierte Klassen, und serialisiert deren Felder, egal ob public
oder private
, keine Properties.
Soweit die Felder nicht als [NonSerialized] von der Serialisierung ausgenommen sind.
Das Ausnehmen von Feldern ist notwendig, wenn diese Felder Verweise darstellen auf andere, ungeeignete Objekte.
Weil Serialisierung folgt den Verweisen, und serialisiert das Verwiesene mit - Serialisierung legt also Objekt-Bäume an.
Und das führt bei ungeeigneten Objekten zu übergroßen Bäumen, bei zirkulären Verweisen auch in Endlos-Schleifen.
Oder aber das verwiesene Objekt ist gar kein serialisierbarer Datentyp, dann failts natürlich auch sofort.
Der frühe Apfel fängt den Wurm.
Zwei Anmerkungen dazu:Die Unterstützung des Binary Serializer in DotNet Core ist zur Zeit ein offenes Issue. Binary Serializer ist langsamer als z.B. ProtocolBuffers oder MS Bond und vor allem werden keine nicht verschiedenen Versionen unterstützt - d.h. ein zusätzliches Feld macht die Dateien unbrauchbar. Deswegen würde ich davon die Finger lassen.
Hallo zusammen,
noch eine kleine Ergänzung. In Untersch. Behandlung der Objektdaten bzgl. Modifizierer bei Serialisierung in den versch. Formaten habe ich mich näher mit den Unterschieden zwischen binärer und XML-Serialisierung beschäftigt.
herbivore