Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Klasse in Datei schreiben und lesen
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

Klasse in Datei schreiben und lesen

beantworten | zitieren | melden

Hallo allerseits,

gibt es in C# etwas, um Klassen in eine Datei zu schreiben? Ich habe eine Klasse mit Daten (Strings, Bytes, Integers schön gemischt) und möchte diese speichern und dann auch wieder lesen. Irgendwie habe ich bisher noch nichts passendes gefunden.
Kann mir jemand helfen?
Karl Stanger
private Nachricht | Beiträge des Benutzers
Wilfried
myCSharp.de - Member

Avatar #2TnJ7IKlYXgOor5sZSIA.jpg


Dabei seit:
Beiträge: 149
Herkunft: Radeberg

beantworten | zitieren | melden

Ja natürlich. Es gibt da viele Wege. Hier mal was als Einstieg: Serialisierung in .NET
- Wer lesen kann, ist klar im Vorteil
- Meistens sitzt der Fehler vorm Monitor
- "Geht nicht" ist keine Fehlermeldung!
- "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

beantworten | zitieren | melden

Danke für den Hinweis. Ich habe das jetzt mit BinaryFormatter gelöst.
Karl Stanger
private Nachricht | Beiträge des Benutzers
david.m
myCSharp.de - Member



Dabei seit:
Beiträge: 136

beantworten | zitieren | melden

Du hast den Hinweis zum BinaryFormatter gelesen?
Zitat
BinaryFormatter ist unsicher und kann nicht sicher gemacht werden. Weitere Informationen finden Sie im BinaryFormatter-Sicherheitshandbuch.

Deserialisierungsrisiken in der Verwendung von BinaryFormatter- und verwandten Typen
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

beantworten | zitieren | melden

Das habe ich gelesen. Meine Anwendung ist aber für den Privatgebrauch und beinhaltet zudem keine sensible Daten. Daher denke ich, dass BinaryFormatter für meine Anwendung ok ist.
Karl Stanger
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 2.028
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Auch zu beim BinaryFormatter zu beachten, dass bei Änderungen an deiner Klasse die bestehenden Dateien nicht mehr deserialisiert werden können.
Du musst dann selbst für Kompatibilität sorgen z.B. duch Versionierung durch Vererbung.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.026

beantworten | zitieren | melden

Zitat von kstanger
Meine Anwendung ist aber für den Privatgebrauch
Du liest das falsch.
Da steht inhaltlich nicht "Hey, unsicher, aber für Privatgebraucht okay" sondern "BinaryFormatter sollte nicht mehr verwendet werden, ausser in Ausnahmen".
Und zwar sehr sehr deutlich.
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 2.028
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

@Abt
Steht auch so in der Doku:
Zitat
Der Typ ist gefährlich und wird nicht für die BinaryFormatter Datenverarbeitung empfohlen.
Anwendungen sollten so bald wie möglich aufhören, BinaryFormatter zu verwenden, auch wenn Sie der Auffassung sind, dass die verarbeiteten Daten vertrauenswürdig sind.
BinaryFormatter ist unsicher und kann nicht sicher gemacht werden.

Quelle:
Deserialisierungsrisiken in der Verwendung von BinaryFormatter- und verwandten Typen

T-Virus
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von T-Virus am .
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

beantworten | zitieren | melden

ok, ich werde den BinaryFormatter nicht benutzen. Aber was ist dann die nächste (naheliegende) Variante? Was wird von Euch empfohlen?
Karl Stanger
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.026

beantworten | zitieren | melden

Steht im Serialisierungsartikel: XML oder Json - außer, Du hast besondere Anforderungen.
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 2.028
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Wenn ich wählen könnte würde ich fast immer zu Json greifen.
Ist gerade bei komplexen Strukturen kompakter als XML.

Hier solltest du dich in die Formate einlesen und für dich entscheiden welches dir besser passt.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

beantworten | zitieren | melden

Jetzt probiere ich Json und laufe prompt auf einen Fehler:


using System.Text.Json;
Json ist im Namespace von System.Text nicht vorhanden. Wie muss ich denn das vereinbaren?
Karl Stanger
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.026

beantworten | zitieren | melden

[FAQ] CS0234 / CS0246 - Der Typ- oder Namespacename "Foo" konnte nicht gefunden werden
NuGet -> https://www.nuget.org/packages/System.Text.Json
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 32

Themenstarter:

beantworten | zitieren | melden

So, es funktioniert mit Json. Hier der Code mit ein paar Testdaten.


       private void ButtonRGBLesen_Click(object sender, EventArgs e)
        {
            string jsonString = File.ReadAllText(Globals.fileNameRGB);
            Farbe[] Farben = JsonSerializer.Deserialize<Farbe[]>(jsonString);
            MessageBox.Show(Globals.fileNameRGB + " gelesen");

            MessageBox.Show(Farben[0].Beschreibung);
            MessageBox.Show(Farben[1].Beschreibung);
            MessageBox.Show(Farben[2].Beschreibung);
            MessageBox.Show(Farben[3].Beschreibung);
        }

        private void ButtonRGBSpeichern_Click(object sender, EventArgs e)
        {
            Farben = new Farbe[]
            {
                new Farbe (0, 255, 255, 255, "weiß"),
                new Farbe (1, 255, 0, 0, "rot"),
                new Farbe (2, 0, 255, 0, "grün"),
                new Farbe (3, 0, 0, 255, "blau")
            };
            string jsonString = JsonSerializer.Serialize(Farben);
            File.WriteAllText(Globals.fileNameRGB, jsonString);
            MessageBox.Show("Farben in " + Globals.fileNameRGB + " gespeichert");
        }

Ist das so ok? Oder habe ich wichtige Dinge nicht berücksichtigt?
Karl Stanger
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.026

beantworten | zitieren | melden

Wir können nur antworten: sieht so aus, dass es kompilieren könnte.
Ob die Struktur passt, können wir Dir nicht sagen, das musst selbst wissen.

Kann evtl nur das Feedback geben: willst wirklich für jedes Setting ne eigene Datei haben?
Dir ist schon bewusst, dass Windows Forms (wie alle .NET App Runtimes) auch eine eingebaute Settingsverwaltung hat? Schon mal in die Docs geschaut?
Application Settings - Windows Forms .NET Framework

Und wenn ich sowas seh Globals.fileNameRGB, dann weiß ich, dass da strukturell was nicht stimmt :-)
Globale Klassen sind ein deutliches Zeichen für einen Fehler im Code Aufbau.

Aber wenn es nur ein Mini Tool für Dich ist, dann tuts Dir wahrscheinlich auch nicht weh.
private Nachricht | Beiträge des Benutzers