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;