Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#10

AW: DataSnap ein TFDJSONDataSets als TJSONObject übertragen

  Alt 25. Mär 2015, 16:10
ich hatte gehofft dass du als Experte mein Thread liest.


Müsste das hier nicht wieder ein normales lesbares JASON erzeugen,
oder ist es normal dass das JASON immer noch Binär ist?
TFDJSONInterceptor.DataSetsToJSONObject(LDataSets, Result);
Ja, das ist normal!

TFDJSONInterceptor.DataSetsToJSONObject läuft über DataSetToJSONValue und DataSetToString , was intern TFDStorageFormat.sfBinary verwendet. Insofern hast du damit also keine reelle Chance auf ein lesbares JSON.

Der gravierendste Nachteil ist dabei, daß sich das Binärformat mit jedem Delphi- bzw. FireDAC-Update ändern kann und damit die DataSets nicht mehr austauschbar sind. Bei JSON hat man wenigstens noch einen brauchbaren Ansatzpunkt.

Aber vielleicht helfen dir diese beiden Methoden weiter:

Delphi-Quellcode:
function DataSetToJSON(Source: TFDDataSet): string;
var
  stream: TStringStream;
begin
  stream := TStringStream.Create;
  try
    Source.SaveToStream(stream, TFDStorageFormat.sfJSON);
    result := stream.ToString;
  finally
    stream.Free;
  end;
end;

procedure JSONToDataSet(const Source: string; Target: TFDDataSet);
var
  stream: TStringStream;
begin
  stream := TStringStream.Create(Source);
  try
    Target.LoadFromStream(stream, TFDStorageFormat.sfJSON);
  finally
    stream.Free;
  end;
end;
Wegen der ursprünglichen Fehlermeldung muss ich nochmal forschen, wenn ich etwas Zeit habe.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat