myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Gemeinschaft (https://www.mycsharp.de/wbb2/board.php?boardid=64)
-- .NET-Komponenten und C#-Snippets (https://www.mycsharp.de/wbb2/board.php?boardid=67)
--- Snippet: Daten binär speichern und laden (https://www.mycsharp.de/wbb2/thread.php?threadid=117051)


Geschrieben von LaTino am 22.04.2016 um 08:18:
  Snippet: Daten binär speichern und laden
Schritt 1: Erstellt eine Klasse, und markiert sie als serialisierbar.

C#-Code:
[Serializable]
class BinaryExample
{
    public int Height { get; set; }
    public int Width { get; set; }
    public byte[] Values { get; set; }
}

Schritt 2: Serialisieren und speichern

C#-Code:
//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

C#-Code:
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


Geschrieben von Christoph1972 am 22.04.2016 um 22:54:
 
Eine kleine Ergänzung von mir....

Felder die nicht serialisiert werden können kann man so ausschließen:

C#-Code:
[Serializable]
class BinaryExample
{
    [field: NonSerialized]
    public event PropertyChangedEventHandler PropertyChanged;

    public int Height { get; set; }
    public int Width { get; set; }
    public byte[] Values { get; set; }
}


Geschrieben von ErfinderDesRades am 02.05.2016 um 02:40:
 
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.


Geschrieben von weismat am 02.05.2016 um 08:01:
 
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.


Geschrieben von herbivore am 04.05.2016 um 08:07:
 
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


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 26.05.2020 19:12