AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Deserialisierung eines Json-Strings

Ein Thema von Ralle1 · begonnen am 16. Okt 2014 · letzter Beitrag vom 21. Okt 2014
Antwort Antwort
Ralle1

Registriert seit: 2. Nov 2011
49 Beiträge
 
Delphi XE3 Professional
 
#1

Deserialisierung eines Json-Strings

  Alt 16. Okt 2014, 16:15
Hallo!
Ich bin auf der Suche nach einer eleganten Lösung, wie ich beliebige Json-Strings in Klassen deserialisieren kann. Unten ein Beispiel, wie ich es z.Z. löse. Leider muss dann jede Klasse die FillFromJson Methode haben. Gibt es nicht via Spring4D Möglichkeiten, das zu automatisieren?



Delphi-Quellcode:
type
  TRequest = class
    Code : integer;
    Message : string;
    procedure FillFromJson(Json: string);
  end;


procedure TRequest.FillFromJson(Json: string);
var
  JsonObject : TlkJSONObject;
begin
  if Json='then exit;
  JsonObject := TlkJSON.ParseText(Json) as TlkJSONobject;
  if not Assigned(JsonObject) then exit;
  try
    Code := StrToIntDef(GetFieldValueAsString('Code'), 0);
    Message := GetFieldValueAsString('Message');
  finally
    JsonObject.Free;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Deserialisierung eines Json-Strings

  Alt 16. Okt 2014, 16:38
Was möchtest du erreichen? Bestehende Klassendefinitionen benutzen und mit den Daten füllen? Dazu findest du z.B. hier etwas:
http://www.danieleteti.it/2009/09/01...n-delphi-2010/
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Deserialisierung eines Json-Strings

  Alt 16. Okt 2014, 19:27
Hallo!
Ich bin auf der Suche nach einer eleganten Lösung, wie ich beliebige Json-Strings in Klassen deserialisieren kann.
SuperObject kann ab Delphi 2010 Objekte direkt über RTTI serialisieren.

Codebeispiele:

https://code.google.com/p/superobjec...705abe94f1ebf6

http://stackoverflow.com/questions/1...-of-properties

Habe damit aber noch nicht selber gearbeitet.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Deserialisierung eines Json-Strings

  Alt 16. Okt 2014, 19:53
Da gibt es auch was von Delphipharm
http://blogs.embarcadero.com/stephen...-line-of-code/
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Deserialisierung eines Json-Strings

  Alt 16. Okt 2014, 20:40
Und dabei ganz besonders den Kommentar von Herrn Monien beachten. Dazu auch mein passendes Thema: http://www.delphipraxis.net/182105-f...unmarshal.html
  Mit Zitat antworten Zitat
Ralle1

Registriert seit: 2. Nov 2011
49 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Deserialisierung eines Json-Strings

  Alt 16. Okt 2014, 20:46
ich muss wohl noch dazu sagen, dass ich in XE2 unterwegs bin.

REST.JSON Unit ist somit leider für mich aus dem Rennen
Aber genau sowas suche ich! SuperObject klingt auch ganz passend, das werde ich mal testen.

Wenn jemand weitere sachdienlich Hinweise geben kann, immer gerne her damit
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Deserialisierung eines Json-Strings

  Alt 16. Okt 2014, 20:50
Das von mir eingangs gepostete Marshalling funktioniert ab Delphi 2010.
Das nutzen wir auch.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Ralle1

Registriert seit: 2. Nov 2011
49 Beiträge
 
Delphi XE3 Professional
 
#8

AW: Deserialisierung eines Json-Strings

  Alt 17. Okt 2014, 06:36
Hört sich auch top an. Wird ausprobiert.
  Mit Zitat antworten Zitat
Ralle1

Registriert seit: 2. Nov 2011
49 Beiträge
 
Delphi XE3 Professional
 
#9

AW: Deserialisierung eines Json-Strings

  Alt 21. Okt 2014, 17:14
ich habe ein Problem beim UnMarshal.

das TJSONUnMarshal.UnMarshal erwartet einen Json inkl "type" und "id".
Type ist soweit kein Problem. Aber woher kriege ich eine ID ?

Wenn ich ein Objekt erzeuge und daraus einen String generiere, sieht es so aus:
{"type":"UnitRequest.TRequest","id":1,"fields":{"M essage":"Hier ein Text","Code":401}}
Mache ich daraus wieder ein Objekt, funktioniert es wunderbar.
Nur bekomme ich aus dem Fremdsystem nur folgenden String:
{"Message":"Hier ein Text","Code":401}
Setze ich type/id/fields manuel drum herum, knallt es bei mir.

Kann mir jemand auf die Sprünge helfen ?

Danke!!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz