myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » Snippet: Daten binär speichern und laden
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Snippet: Daten binär speichern und laden

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
LaTino LaTino ist männlich
myCSharp.de-Poweruser/ Experte

avatar-4122.png


Dabei seit: 03.04.2006
Beiträge: 2.968
Entwicklungsumgebung: Rider / VS2019 / VS Code
Herkunft: Thüringen


LaTino ist offline

Snippet: Daten binär speichern und laden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
22.04.2016 08:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Christoph1972 Christoph1972 ist männlich
myCSharp.de-Mitglied

avatar-2726.jpg


Dabei seit: 19.09.2008
Beiträge: 211
Entwicklungsumgebung: VS2015 Pro
Herkunft: NRW


Christoph1972 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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; }
}
22.04.2016 22:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ErfinderDesRades
myCSharp.de-Poweruser/ Experte

avatar-3151.jpg


Dabei seit: 31.01.2008
Beiträge: 5.286


ErfinderDesRades ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
02.05.2016 02:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
weismat
myCSharp.de-Mitglied

Dabei seit: 20.09.2005
Beiträge: 867
Entwicklungsumgebung: Vistual Studio 2017, VS Code
Herkunft: Frankfurt am Main


weismat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
02.05.2016 08:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Poweruser/ Experte

avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 49.458
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
04.05.2016 08:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Jahre.
Der letzte Beitrag ist älter als 3 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 22.07.2019 22:58