top / index / prev / next / target / source

2015-12-03 diary: Delphi:Delphi: REST.JSON を利用したオブジェクトの直列化

いがぴょんの日記 日記形式でつづる いがぴょんコラム ウェブページです。

Delphi:Delphi: REST.JSON を利用したオブジェクトの直列化

オブジェクトからJSONへの相互変換のメモ。これは REST.JSON を利用する例です。

直列化(シリアライズ)をおこないたいクラスは以下のようなものとします。string, Integer, TBytes (バイナリ) が REST.JSON の JSON シリアライズに対応しています。(すべての型がシリアライズ可能ではない点に注意)

type
  TMyApp = class(TObject)
  private
    FName: string;
    FAge: Integer;
    FPhoto: TBytes;

  published
    property Name: string read FName write FName;
    property Age: Integer read FAge write FAge;
    property Photo: TBytes read FPhoto write FPhoto;
  end;

REST.JSON を利用するために、これを uses します。

uses REST.JSON;

オブジェクトをJSONにシリアライズする例。

procedure TForm1.btnToJSONClick(Sender: TObject);
var
  my: TMyApp;
  wrkstream: TMemoryStream;
begin
  my := TMyApp.Create;
  wrkstream := TMemoryStream.Create;

  try
    my.name := edtName.Text;
    my.Age := StrToInt(edtAge.Text);
    Image1.Bitmap.SaveToStream(wrkstream);

    SetLength(my.FPhoto, wrkstream.Size);
    wrkstream.Position := 0;
    wrkstream.Read(my.Photo[0], wrkstream.Size);

    Memo1.Lines.Text := TJson.ObjectToJsonString(my);

  finally
    FreeAndNil(my);
    FreeAndNil(wrkstream);
  end;

end;

JSONからオブジェクトを逆シリアライズする例。

procedure TForm1.btnFromJSONClick(Sender: TObject);
var
  my: TMyApp;
  wrkstream: TMemoryStream;
begin
  wrkstream := TMemoryStream.Create;

  try
    my := TJson.JsonToObject<TMyApp>(Memo1.Lines.Text);

    edtName.Text := my.name;
    edtAge.Text := IntToStr(my.Age);

    wrkstream.Write(my.Photo, length(my.Photo));
    Image1.Bitmap.LoadFromStream(wrkstream);

  finally
    FreeAndNil(my);
    FreeAndNil(wrkstream);
  end;

end;

参考情報

関連する記事


この日記について