top / index / prev / next / target / source
 日記形式でつづる いがぴょんコラム ウェブページです。
 日記形式でつづる いがぴょんコラム ウェブページです。
オブジェクトから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;