Laden...

Exception bei Json Deserialisierung

Erstellt von kstanger vor einem Jahr Letzter Beitrag vor einem Jahr 190 Views
K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr
Exception bei Json Deserialisierung

Hallo allerseits,
Ich habe eine Json Deserialisierung


string jsonString = File.ReadAllText(Globals.DateiPfad + "Ledsteuerung_Settings.txt");
Presetting[] Presettings = JsonSerializer.Deserialize<Presetting[]>(jsonString);


Der Json-String scheint sauber zu sein:


[
  {
    "SetPfad": "C:\\users\\kstan\\source\\LED\\",
    "SetRGBDatei": "rgb.txt",
    "SetEventDatei": "xevent.txt",
    "SetTimingDatei": "timing.txt",
    "SetRGBMaxHell": 255,
    "SetAnzLed": 40,
    "SetAnzRelais": 8,
    "SetZeitraffer": 60,
    "SetProfilName": "TestProfil",
    "SetLastOne": 1
  }
]

Die Presetting-Klasse habe ich mehrfach überprüft, aber bisher nichts auffälliges gefunden:


    [Serializable]
    public class Presetting
    {
        private string Pfad;
        private string RGBDatei;
        private string EventDatei;
        private string TimingDatei;
        private byte RGBMaxHell;
        private byte AnzLed;
        private byte AnzRelais;
        private int Zeitraffer;
        private string ProfilName;
        private byte LastOne;

        public Presetting(string pfad, string rgbDatei, string eventdatei, string timingdatei, 
            byte rgbMaxHell, byte anzLed, byte anzRelais, int zeitraffer, string profilName, byte lastOne)
        {
            Pfad = pfad;
            RGBDatei = rgbDatei;
            EventDatei = eventdatei;
            TimingDatei = timingdatei;
            RGBMaxHell = rgbMaxHell;
            AnzLed = anzLed;
            AnzRelais = anzRelais;
            Zeitraffer = zeitraffer;
            ProfilName = profilName;
            LastOne = lastOne;
        }

        public string SetPfad
        {
            get { return Pfad; }
            set { Pfad = value; }
        }
        public string SetRGBDatei
        {
            get { return RGBDatei; }
            set { RGBDatei = value; }
        }
        public string SetEventDatei
        {
            get { return EventDatei; }
            set { EventDatei = value; }
        }
        public string SetTimingDatei
        {
            get { return TimingDatei; }
            set { TimingDatei = value; }
        }
        public byte SetRGBMaxHell
        {
            get { return RGBMaxHell; }
            set { RGBMaxHell = value; }
        }
        public byte SetAnzLed
        {
            get { return AnzLed; }
            set { AnzLed = value; }
        }
        public byte SetAnzRelais
        {
            get { return AnzRelais; }
            set { AnzRelais = value; }
        }
        public int SetZeitraffer
        {
            get { return Zeitraffer; }
            set { Zeitraffer = value; }
        }
        public string SetProfilName
        {
            get { return ProfilName; }
            set { ProfilName = value; }
        }
        public byte SetLastOne
        {
            get { return LastOne; }
            set { LastOne = value; }
        }
    }


Die Instanziierung scheint auch ok:


        Presetting[] Presettings;


Visual Studio schlägt mir vor


string jsonString = File.ReadAllText(Globals.DateiPfad + "Ledsteuerung_Settings.txt");
_ = JsonSerializer.Deserialize<Presetting[]>(jsonString);

Ich kann damit nichts anfangen, aber vielleicht ist das ein Hinweis auf einen anderen Fehler.
Kann mir jemand helfen oder zumindest einen Tipp zur weiteren Fehlersuche geben?

Karl Stanger
16.835 Beiträge seit 2008
vor einem Jahr

Vorweg: Du hast viele Alltagsfragen, die Du eigentlich lösen kannst, wenn Du die Beispiele in den Docs durch machst bzw. die Docs liest.
So kommst Du eigenständig eventuell schneller voran, als wenn Du wartest, bis jemand in nem Forum antwortet.

Im Titel steht "Exception bei Json Deserialisierung". Welche Exception denn? Im Beitrag steht nix - und hellsehen können wir leider noch nicht.
Ins Blaue geraten: er beschwert sich weil es keinen Parameterlosen Constructor gibt?
In Exceptions steht aller meistens der Grund drin, weshalb es knallt - und oft sogar mit der Lösung, wie diese behoben wird.

Deine Klasse kann enorm vereinfacht werden:


[Serializable]
public class Presetting
{
    public string SetPfad {get;set;}
    public string SetRGBDatei {get;set;}
    public string SetEventDatei {get;set;}
    public  string SetTimingDatei {get;set;}
    public byte SetRGBMaxHell {get;set;}
    public byte SetAnzLed {get;set;}
    public byte SetAnzRelais {get;set;}
    public int SetZeitraffer {get;set;}
    public string SetProfilName {get;set;}
    public byte SetLastOne {get;set;}
}

Was das ganze Set vor den Eigenschaftsnamen soll, is mir aber nen Rätsel.

PS: bitte keine Pfade von Hand zusammen wursteln, das geht meist schief.
Path.Combine() (Docs) gibts aus Gründen.