Ich bastele mir gerade eine WinForms Anwendung fürs .NET Framework 4.8 in C#
Um schnell mal Einstellungen wegspeichern und bei erneutem Programmstart wieder hervorholen zu können, habe ich es mit dem JSON Format probiert.
Also
1
using System.Text.Json;
2
using System.Text.Json.Serialization;
hingeschrieben und die verlangten Verweise eingefügt.
Eine Klasse zusammen gestellt, die genau das enthält, was gespeichert werden soll.
Im Großen und Ganzen funktioniert auch schon sehr viel. ABER, wenn ein Color Struct geladen werden soll, sehe ich nix. Da gibt es den Durchblick auf ungewünschte Weise. Sprich, egal welche Farbe gespeichert werden sollte, kommt völlig transparent zurück. In der Datei steht allerdings noch alles über die gewünschten Farben. Es muss also beim Lesen schief gehen.
Das Problem müssen doch noch andere haben. Man findet im Netz auch was, allerdings keine Copy&Paste&glücklich sein-Fertiglösung.
Der Versuch eine JsonConverter<Color> Klasse zu erstellen und per JsonSerializerOptions in Stellung zu bringen scheitert bei mir. Beim Aufruf der read-Methode wirft er eine Exception. TrySkip funktioniert, aber ich will ja schon gerne wissen, was drin steht.
Wie komme ich wieder an die richtigen Farben ran ?
Da ich schon eine größere Datei mit Farben gespeichert habe, würde ich gerne das Abspeichern so lassen und das Einlesen so ändern, dass es diese Infos lesen kann.
PS: mein Array von 3 Farben sieht in der Datei so aus :
Nutzt du Visual Studio?
Da kannst du dir die Klasse für die Deserialisierung auch über "Paste Special" --> "Paste JSON as Classes" oder so ähnlich generieren lassen.
Das "farben": steht da aber nicht drin, oder? Das wäre dann nämlich kein
ordentliches JSON.
Das steht unter anderem so in der Datei drinne. Ich habe aber nur einen Ausschnitt der Datei hier rein gestellt. Die geschweiften Klammern sind in dem Teil, den ich weg gelassen habe. Da wird nämlich ein ganzes Objekt serialisiert. Die anderen Eigenschaften sind soweit unauffällig.
Nach etwas experimentieren, bin ich zu der Vermutung gekommen, dass es wohl an der Reihenfolge liegt, in der der Deserialisierer die Eigenschaften von Color setzt. Sprich er füllt zuerst A, R, G und B. Wenn er aber danach IsNamedColor setzt, bevor Name gesetzt ist, zerdeppert er sich wieder alles.
Also, wenn ich vor "farben": eine geschweifte Klammer auf { und am Schluß eine
} mache, und als Json-Datei im Windowseditor als UTF8 - Datei speichere, habe
ich ein konforme JSON-Datei und kann sie so auch als ganzen Text wieder mit meinen JSON-Funktionen auslesen. Die Objekte werden auch genauso wiedergegeben.
Dann hast Du ja auch keins. Jedenfalls nicht mit dem Json. Wenn Dein Programm dann beim Lesen der Json-Daten irgendwas kaputt macht, dann liegt das am Fehler in Zeile 42.
Der Versuch eine JsonConverter<Color> Klasse zu erstellen und per
JsonSerializerOptions in Stellung zu bringen scheitert bei mir. Beim
Aufruf der read-Methode wirft er eine Exception.