Frage von Crysali, 28

C# - Struct als Datei schreiben und wieder als Struct auslesen?

Ich möchte gerne wissen, was die "beste"/gängigste Methode ist, um einen Struct außerhalb des Programms als Datei zu speichern, die man auch umgekehrt wieder als Struct im Programm benutzen/auslesen kann.

Mit meinem Wissensstand könnte ich einen Struct mit einer eigenen Methode public override string ToString und StreamWriter in eine txt-Datei speichern. Dann würde ich eine Methode schreiben, die eine txt-Datei ausliest und dann Zeilen den Struct-Eigenschaften zuordnet. Diese Methode ist aber sehr ungenau und fehleranfällig, besonder wenn man de txt-Datei außerhalb des Programms bearbeitet, manuell.

Zusammengefasst, wie kann ich in C# Structs aus meinem Programm, die in Variablen gespeichert sind, außerhalb des Programms abspeichern, sodass ich sie ohne das Programm selbst bearbeiten kann und sie auch über eine Methode wieder in eine Variable des gleichen Datentyps in das Programm zurückladen kann ?

Expertenantwort
von TeeTier, Community-Experte für programmieren, 7

Neben den bisherigen Antworten noch ein kleiner Hinweis:

Egal ob du deinen struct-Typ serialisierst, als eigenes Text-Format, XML, Binär oder von mir aus auch JSON speicherst, vergiss nicht die gelesenen Daten auf Plausibilität zu prüfen!

Diese mangelnde Prüfung ermöglicht oft Sicherheitslücken, vor allem wenn die Daten deiner Struktur in irgend einer Form über ein Netzwerk übertragen werden, kann man damit sehr viel Schindluder treiben!

Das ist genau der Grund, warum man immer von gefährlichen Lücken z. B. im Adobe Reader hört, für die man unbedingt einen Patch einspielen soll. Im Endeffekt läuft das meiste davon auf eine mangelnde Prüfung der Eingangsdaten hinaus.

(Der Adobe Reader prüft dann eine aus dem Internet geladene PDF-Datei nicht ordentlich, und schwupps wird Shellcode ausgeführt!)

Generell sollte man IMMER sämtliche Daten, die aus externen Quellen gelesen werden (Datei, Netzwerk, DB, ...) als kompromittiert betrachten, und einer strengen Prüfung unterziehen. Tut man das nicht, stehen Kriminellen Tür und Tor offen!

Naja, viel Spaß! :)

Antwort
von Mikkey, 20

Du kannst in C# Klassen (und auch structs) als XML-Serializable deklarieren. Du brauchst dann nur die Methoden Serialize und Deserialize implementieren und das Lesen und Schreiben realisieren.

Die XML-Daten selbst kannst Du mit jedem Editor bearbeiten.

Kommentar von Crysali ,

Danke, ich schau mir das mal an!

Antwort
von Berny96, 17

Das nennt sich Serialisieren. Du willst dein Struct in ein Format bringen was sich ganz einfach parsen, also lesen lässt. Dafür gibt es einige Formate die eben dass was du mit der Methode machen würdest schon für dich erledigen. So musst du dein Struct nur noch an die Serisilierungsmethode übergeben und anschließend in eine Datei speichern. Da gibt es einige Formate die du verwenden könntest, hier sind ein Paar davon:

  • XML
  • YAML
  • Binär

C# hat glaube ich für alle drei davon eine Methode schon vergefertigt. Google einfach mal nach "C# serialise struct FORMATNACHWAHL".

Keine passende Antwort gefunden?

Fragen Sie die Community