Laden...

[erledigt] JSON Deserialisieren mit JsonConvert.DeserializeObject

Erstellt von MNI vor 3 Jahren Letzter Beitrag vor 3 Jahren 348 Views
M
MNI Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren
[erledigt] JSON Deserialisieren mit JsonConvert.DeserializeObject

Guten Morgen,

dies ist mein erster Beitrag hier, bitte habt etwas Nachsicht, wenn ich irgendeine Regel nicht beachtet habe. Vielen Dank schon einmal dafür.

Ich bin Anfänger in C# und JSON. Und habe das Problem das ich mit der Derisalizierung folgendes JSON Scripts nicht weiterkomme.


{"@odata.context":"$metadata#Users","value":[{"Name":"Admin","FriendlyName":"Admin","Type":"Admin","IsActive":false,"Enabled":true},
{"Name":"XXX")","FriendlyName":"XXX)","Type":"Admin","IsActive":false,"Enabled":true},
{"Name":"YYY")","FriendlyName":"YYY","Type":"Admin","IsActive":false,"Enabled":true},
{"Name":"ZZZ")","FriendlyName":"ZZZ","Type":"Admin","IsActive":false,"Enabled":true}]}

Ja ich habe vorher schon gegooglet und auch hier gesucht und bin dadurch immerhin schon mal auf einen Post gestossen der diese Seite empfahl:

https://json2csharp.com/

Dies hat mir dahingehend schon geholfen das mein derzeitiger Code nun so aussieht:


        User myUser = JsonConvert.DeserializeObject<User>(sContent);

        public class User
        {
            public string Name { get; set; }
            public string FriendlyName { get; set; }
            public string Type { get; set; }
            public bool IsActive { get; set; }
            public bool Enabled { get; set; }
        }

Problem ist, das kein Fehler auftritt, myUser aber eben auch nichts enthält. Wenn ich mir das JSON ansehe sind ja auch mehrere myUser im JSON definiert und mir ist auch klar, das dies also eine "Sammlung" ist. Die würde ich auch gern als Array oder Collection zurückkriegen und genau das ist die Stelle an der ich eben grad nicht weiterkomme.

Ich habs schon mit <List> und <Enumeration> probiert beides ergab dann aber Sinngemäß den Fehler, dass dies auf das JSON nicht anwendbar ist, weil es nicht dem Type entspricht.

Ich will auch nicht ausschliessen, das ich die Lösung auf diversen Seiten nicht schon gelesen habe, dies dann aber nicht kapiert habe, dass dies meine Lösung wäre.

Ich würde mich sehr freuen, wenn mir als Anfänger hier jemand anhand dieses Beispiels kurz mal auf die Sprünge helfen könnte und mir die Lösung erklären würde.

Vielen lieben Dank vorab.

Vielen Dank für jegliche konstruktive Hilfe

4.941 Beiträge seit 2008
vor 3 Jahren

Hallo und willkommen,

also ich erhalte bei deinen JSON-Daten (nachdem ich die Fehler bei "Name":"...")" beseitigt habe) folgende 2 Klassen von der von dir verlinkten Converter-Seite:


// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse); 
    public class Value    {
        public string Name { get; set; } 
        public string FriendlyName { get; set; } 
        public string Type { get; set; } 
        public bool IsActive { get; set; } 
        public bool Enabled { get; set; } 
    }

    public class Root    {
        [JsonProperty("@odata.context")]
        public string OdataContext { get; set; } 
        public List<Value> value { get; set; } 
    }

Du mußt also Root deserialisieren, nicht bloß einen einzelnen User (du möchtest ja eine Liste erhalten).

M
MNI Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren

Ah...ja sorry erstmal für den Fehler bei Name..Hatte die Daten im JSON verfälscht (wollte keine Klarnamen hier reinschreiben) und nicht aufgepasst.

Okay ich glaub ich verstehe. Eine Klasse allein reicht nicht. Ich brauch 2 wobei mir Root dann die Klasse Value als Array zurückgibt.

Ich probier das gleich mal aus. Vielen Dank schonmal. Werd noch schreiben ob es funktioniert hat.

Vielen Dank für jegliche konstruktive Hilfe

M
MNI Themenstarter:in
3 Beiträge seit 2020
vor 3 Jahren

So grad ausprobiert und hat super funktioniert.

Vielen Dank für diese Hilfestellung. Und auch nochmals Danke für die Nachsicht mit dem unsauberen JSON Beispiel.

Vielen Dank für jegliche konstruktive Hilfe