Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Deserialisieren eines Json-Strings
CarnifeX
myCSharp.de - Member



Dabei seit:
Beiträge: 48

Themenstarter:

Deserialisieren eines Json-Strings

beantworten | zitieren | melden

Hallo zusammen,

mal wieder brauche ich eure Hilfe :D
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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von CarnifeX am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15980

beantworten | zitieren | melden

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.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2459
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

beantworten | zitieren | melden

Zitat
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
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

Zitat von [email protected]
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.
private Nachricht | Beiträge des Benutzers