使用泛型支持直接将json字符串转换为自定义的类;
unit Form_Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, System.JSON, REST.JSON, REST.JsonReflect, StdCtrls,
System.Generics.Collections;
type
TFormMain = class(TForm)
btnString: TButton;
Memo: TMemo;
btnPair: TButton;
btnObject: TButton;
btnArray: TButton;
btn1: TButton;
btn2: TButton;
procedure btnStringClick(Sender: TObject);
procedure btnPairClick(Sender: TObject);
procedure btnObjectClick(Sender: TObject);
procedure btnArrayClick(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyJsonDataClass = class
private
FName1: string;
procedure SetName1(const Value: string);
public
property Name1: string read FName1 write SetName1;
end;
var
FormMain: TFormMain;
implementation
{$R *.dfm}
procedure TFormMain.btn1Click(Sender: TObject);
var
vMyObj: TMyJsonDataClass;
begin
vMyObj := TMyJsonDataClass.Create;
vMyObj.Name1 := '钱锋';
Memo.Lines.Add(TJson.ObjectToJsonString(vMyObj));
vMyObj.Free;
end;
procedure TFormMain.btn2Click(Sender: TObject);
var
vMyObj: TMyJsonDataClass;
begin
// {"name1":"\u94B1\u950B"}
vMyObj := TJson.JsonToObject<TMyJsonDataClass>('{"name1":"\u94B1\u950B"}');
ShowMessage(vMyObj.Name1);
vMyObj.Free;
end;
procedure TFormMain.btnArrayClick(Sender: TObject);
var
JA: TJSONArray;
JO: TJSONObject;
JP: TJSONPair;
JN: TJSONNumber;
JNull: TJSONNull;
begin
JO := TJSONObject.Create;
JP := TJSONPair.Create('时间', DateTimeToStr(Now));
JO.AddPair(JP);
JN := TJSONNumber.Create(12.3433);
JO.AddPair(TJSONPair.Create('价格', JN));
JNull := TJSONNull.Create;
JO.AddPair('空的', JNull);
//
JA := TJSONArray.Create;
JA.AddElement(JO);
JA.AddElement(JN);
JA.AddElement(JNull);
JA.AddElement(TJSONTrue.Create);
JA.AddElement(TJSONFalse.Create);
//
Memo.Lines.Add(JA.ToString);
Memo.Lines.Add('');
end;
procedure TFormMain.btnObjectClick(Sender: TObject);
var
JO: TJSONObject;
JP: TJSONPair;
JN: TJSONNumber;
JNull: TJSONNull;
begin
JO := TJSONObject.Create;
JP := TJSONPair.Create('时间', DateTimeToStr(Now));
JO.AddPair(JP);
JN := TJSONNumber.Create(12.3433);
JO.AddPair(TJSONPair.Create('价格', JN));
JNull := TJSONNull.Create;
JO.AddPair('空的', JNull);
//
Memo.Lines.Add(JO.ToString);
Memo.Lines.Add('');
end;
procedure TFormMain.btnPairClick(Sender: TObject);
var
JP: TJSONPair;
JN: TJSONNumber;
begin
JP := TJSONPair.Create('类型', 'JSON Pair');
Memo.Lines.Add(JP.ToString);
Memo.Lines.Add('');
JN := TJSONNumber.Create(pi);
JP := TJSONPair.Create('类型', JN);
Memo.Lines.Add(JP.ToString);
Memo.Lines.Add('');
end;
procedure TFormMain.btnStringClick(Sender: TObject);
var
JS: TJSONString;
begin
JS := TJSONString.Create('这是一个JSON String!');
Memo.Lines.Add(JS.ToString);
Memo.Lines.Add('');
end;
{ TMyJsonDataClass }
procedure TMyJsonDataClass.SetName1(const Value: string);
begin
FName1 := Value;
end;
end.