Как сериализовать / десериализовать объекты, используя X-SuperObject - PullRequest
0 голосов
/ 04 октября 2018

Может X-SuperObject сериализовать / десериализовать объекты?Например, у меня есть следующая структура:

TMyClass
  private
    FField: Integer;
  published
    property field: Integer read FField write FField;
end;

Могу ли я, используя X-SuperObject, быстро сериализовать / десериализовать все published свойства этого объекта, включая вложенные объекты?Если да, то как?

1 Ответ

0 голосов
/ 05 октября 2018

Да, X-SuperObject может сериализовать / десериализовать, включая вложенные объекты (с некоторыми ограничениями, конечно).Документация проста, но их примеры охватывают основы.

uses
  XSuperJSON, XSuperObject;

type
  TSubClass = class
    A: Integer;
    B: Integer;
  end;

  TMyClass = class
  private
    FField: Integer;
    FSampler: string;
    FSubClass: TSubClass;
  published
    property field: Integer read FField write FField;
    property subClass: TSubClass read FSubClass write FSubClass;
  end;

procedure TForm2.Button3Click(Sender: TObject);
var
  MyClass: TMyClass;
  S: string;
begin
  Memo1.Lines.Clear;

  MyClass := TMyClass.FromJSON('{"field":12}'); //,"subClass":{"A":208,"B":39}}');
  if MyClass.field = 12 then
    Memo1.Lines.Add('MyClass.field has the correct value of 12');
  if Assigned(MyClass.subClass) and (MyClass.subClass.A = 208) then
    Memo1.Lines.Add('MyClass.subClass.A has the correct value of 208');

  S := MyClass.AsJSON;
  Memo1.Lines.Add(S);

  if not Assigned(MyClass.subClass) then
    MyClass.subClass := TSubClass.Create;
  MyClass.subClass.A := 345;
  MyClass.subClass.B := 1024;

  S := MyClass.AsJSON;
  Memo1.Lines.Add(S);
end;

У меня также был хороший успех со стандартной библиотекой System.JSON от Delphi после изучения Delphi-JsonToDelphiClass от PKGeorgiev.Есть несколько атрибутов, которые можно добавить в некоторых случаях для получения необходимых результатов, но по большей части он очень подходит для стандартных RTL.https://github.com/PKGeorgiev/Delphi-JsonToDelphiClass

...