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;
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;
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;