JSONとDelphi Objectの交換
12280 ワード
DelphiはRTTIが強化されてから、言語の柔軟性がどれだけ強化されたか、DelphiのdbExpressにはDBXJSONとDBXJSOnReflectの2つのユニットが提供され、JSONシーケンス化が提供されている
次の例はDelphiエンティティオブジェクトをJSON文字列に変換し、JSON文字列をDelphiエンティティオブジェクトに変換する例です.(Delphi XE 3でテストに合格しました)
次の例はDelphiエンティティオブジェクトをJSON文字列に変換し、JSON文字列をDelphiエンティティオブジェクトに変換する例です.(Delphi XE 3でテストに合格しました)
1 unit Unit2;
2
3 interface
4
5 uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
6 DBXJSON, DBXJSONReflect;
7
8 type
9 TPerson = class(TObject)
10 public
11 Name: String;
12 Password: String;
13 Age: Integer;
14 end;
15
16 TForm2 = class(TForm)
17 Memo1: TMemo;
18 procedure FormCreate(Sender: TObject);
19 private
20 function ObjectToJSON(AData: TObject): TJSONValue;
21 function JSONToObject(AJSONValue: TJSONValue): TObject;
22 public
23 end;
24
25 var
26 Form2: TForm2;
27
28 implementation
29
30 {$R *.dfm}
31
32 function TForm2.JSONToObject(AJSONValue: TJSONValue): TObject;
33 var
34 lUnMarshal: TJSONUnMarshal;
35 begin
36 lUnMarshal := TJSONUnMarshal.Create();
37 try
38 Result := lUnMarshal.Unmarshal(AJSONValue);
39 finally
40 FreeAndNil(lUnMarshal);
41 end;
42 end;
43
44 function TForm2.ObjectToJSON(AData: TObject): TJSONValue;
45 var
46 lMarshal: TJSONMarshal;
47 begin
48 lMarshal := TJSONMarshal.Create();
49 try
50 Result := lMarshal.Marshal(AData);
51 finally
52 FreeAndNil(lMarshal);
53 end;
54 end;
55
56 procedure TForm2.FormCreate(Sender: TObject);
57 var
58 lPerson: TPerson;
59 lJSONValue: TJSONValue;
60 const
61 lJSONString: String = '{"type":"Unit2.TPerson","id":1,"fields":{"Name":"Hezihang","Password":"123","Age":23}}';
62 begin
63 Memo1.Lines.Clear;
64 /// Object Convert to JSON
65 Memo1.Lines.Add('Object to JSON String');
66 Memo1.Lines.Add('--------------------------------------');
67 Memo1.Lines.Add('');
68 lPerson := TPerson.Create;
69 lPerson.Name := 'Hezihang';
70 lPerson.Password := '123';
71 lPerson.Age := 23;
72 lJSONValue := ObjectToJSON(lPerson);
73 FreeAndNil(lPerson);
74 Memo1.Lines.Add(lJSONValue.ToString);
75 lJSONValue.Free;
76 Memo1.Lines.Add('');
77 Memo1.Lines.Add('--------------------------------------');
78 /// JSON Convert to Object
79 Memo1.Lines.Add('');
80 Memo1.Lines.Add('JSON String'' To a Class Instance''');
81 Memo1.Lines.Add('--------------------------------------');
82 Memo1.Lines.Add('');
83 lJSONValue := TJSONObject.ParseJSONValue(lJSONString);
84 lPerson := JSONToObject(lJSONValue) as TPerson;
85 lJSONValue.Free;
86 Memo1.Lines.Add('Name: ' + lPerson.Name);
87 Memo1.Lines.Add('Password: ' + lPerson.Password);
88 Memo1.Lines.Add('Age: ' + IntToStr(lPerson.Age));
89 lPerson.Free;
90 Memo1.Lines.Add('');
91 Memo1.Lines.Add('--------------------------------------');
92 end;
93
94 end.