Laden...

Deserialisieren eines Json-Strings

Erstellt von CarnifeX vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.230 Views
C
CarnifeX Themenstarter:in
48 Beiträge seit 2015
vor 8 Jahren
Deserialisieren eines Json-Strings

Hallo zusammen,

mal wieder brauche ich eure Hilfe 😄
Und zwar möchte ich Daten die mir eine Api via JSON-String liefert in meinem Programm in eine Liste auflisten.

Ich bekomme es einfach nicht hin meinen JSON-String zu deserialisieren um die einzelnen Daten rauszupicken.

Der String ist folgendermaßen aufgebaut:



{"result":"ok","data":{"4444":{	"ID":"4444","userID":"-1","time":"1451565481","per":"Auf Rechnung","payed":"Y","status":"2","total":"77.777"},"5555":{"ID":"5555","userID":"-1","time":"1451561640","per":"Auf Rechnung","payed":"Y","status":"2","total":"88.888"},	"6666":{"ID":"5555",	"userID":"1111","time":"1451559999","per":"Auf Rechnung","payed":"Y","status":"2","total":"99.999"}}}


(Andere Ansicht):


{
   "result": "ok",
   "data": {
      "4444": {
         "ID": "4444",
         "userID": "-1",
         "time": "1451565481",
         "per": "Auf Rechnung",
         "payed": "Y",
         "status": "2",
         "total": "77.777"
      },
      "5555": {
         "ID": "5555",
         "userID": "-1",
         "time": "1451561640",
         "per": "Auf Rechnung",
         "payed": "Y",
         "status": "2",
         "total": "88.888"
      },
      "6666": {
         "ID": "5555",
         "userID": "1111",
         "time": "1451559999",
         "per": "Auf Rechnung",
         "payed": "Y",
         "status": "2",
         "total": "99.999"
      }
   }
}

(Der ganze String ist um sehr sehr vieles Länger)

Kann mir bitte jemand einen Tipp geben wie ich das hinbekomme.
Mich verwirrt vorallem der Anfang des Strings. Dieses "result":"ok","data"??

Danke im Vorraus

16.834 Beiträge seit 2008
vor 8 Jahren

Erstelle Dir eine Datenstruktur, dass genau das Json Resultat darstellt.
Mit Odata hättest Du glück haben können, dann kann man das automatisch erstellen. Aber diese Schnittstelle kann kein Odata.

Willst Du direkt untypisiert zugreifen, dann schau Dir die Dokumentation von Json.NET an.
Da steht alles - sogar Beispielhaft direkt auf der Startseite. Das ist ein Standardvorgehen bei Json. Du solltest tausende, wenn nicht Millionen von Beispielen dazu finden können.
Bitte verwende in Zukunft vorher Google bei solchen 0815 Anforderungen 😉

Das result:ok ist nichts anderes als ein Statushinweis.
Was es da noch alles gibt musst Du aus der Dokumentation der API entnehmen. Das ist kein Standard.

Kann Dir aber direkt sagen, dass das kein toll durchdachtes Json Schema ist.
Denn offensichtlich werden hier Namen von Nodes dynamisch missbraucht (das "4444", "5555").
Ist eine Verletzung von Json. Evtl. musst Du hier manuell in die Deserialisierung eingreifen; sprich direkt mit einem JObject von Json.NET arbeiten.
Allgemein sieht das nicht nach einer gut durchdachten API aus, wenn ich ehrlich bin. Stati wie "Auf Rechnung" werden i.d.R. nicht via lokalisiertem String beschrieben.

2.207 Beiträge seit 2011
vor 8 Jahren

Hallo CarnifeX,

du kannst dir solche Klassen auch erstellen lassen. Achte aber bitte drauf, was bei rauskommt.

json2csharp biete so eine Funktionalität an. (Hättest du mit ein bisschen googlen auch herausbekommen 😉.

Aber wenn du deinen String eingibst, bringt er dir schon ein

public class __invalid_type__4444

was du nicht einfach so kopieren und einfügen solltest...wie Abt sagte: Da stimmt was nicht.

Gruss

Coffeebean

M
402 Beiträge seit 2005
vor 8 Jahren

json2csharp biete so eine Funktionalität an.

Visual Studio kann sowas auch.
JSON kopieren und dann Bearbeiten => Inhalte einfügen => JSON als Klassen einfügen

lg

T
314 Beiträge seit 2013
vor 8 Jahren

JSON kopieren und dann Bearbeiten => Inhalte einfügen => JSON als Klassen einfügen

Danke! Bei mir allerdings nur sichtbar, wenn der Texteditor den Fokus hat.