procedure TForm5.Button4Click(Sender: TObject);
var
O, item: ISuperObject;
Strm: TStringStream;
result: string;
ctx: TSuperRttiContext;
student: TStudent;
begin
//可以参考superobject 的readme.html
//json demo https://en.bitcoin.it/wiki/API_reference_%28JSON-RPC%29
// {"jsonrpc":"2.0","method":"fuck","params":["hehe",32,4],"id":"1433813750019"}
// O := SO('{"jsonrpc":"2.0","method":"fuck","params":["hehe",32,4],"id":"1433813750019"}');
// O := SO('{"jsonrpc": "2.0", "method": fuck, "params":["hehe",32,4]}');
O := SO(
'{"jsonrpc": "2.0", "method": "fuck", "params":["hehe",32,4],"id":"12"}');
Strm := TStringStream.Create(O.AsString);
try
IdHTTP1.Request.ContentType := 'application/json';
result := IdHTTP1.Post('http://10.0.0.107/json_server/server.php', Strm);
Memo1.Lines.Add(result);
O := SO(result);
Memo1.Lines.Add(O.AsObject.S['result']);
O := SO(
'{"jsonrpc":"2.0","method":"getstudent","params":[{"id":1,"name":"name","age":123}],"id":"1433813750240"}');
Strm := TStringStream.Create(O.AsString);
result := IdHTTP1.Post('http://10.0.0.107/json_server/server.php', Strm);
Memo1.Lines.Add(result);
O := SO(result);
result := O.AsObject.S['result'];
Memo1.Lines.Add(result);
ctx := TSuperRttiContext.Create;
try
// json转换为对象
student := ctx.AsType<TStudent>(SO(result));
ShowMessage(student.name);
// 对象转换为json
O := ctx.AsJson<TStudent>(student);
ShowMessage(O.AsString);
finally
// ctx.Free;
end;
O := SO(
'{"jsonrpc":"2.0","method":"getstudents","params":["xxx"],"id":"1433814568751"}');
Strm := TStringStream.Create(O.AsString);
result := IdHTTP1.Post('http://10.0.0.107/json_server/server.php', Strm);
Memo1.Lines.Add(result);
O := SO(result);
Memo1.Lines.Add(O.AsObject.S['result']);
for item in O['result'] do
begin
student := ctx.AsType<TStudent>(item);
ShowMessage(student.name);
// ShowMessage(item.AsString);
end;
finally
Strm.Free;
end;
end;