JSON与Delphi Object的互换
2023-09-11 14:19:07 时间
Delphi自从增强了RTTI后,语言的可灵活性多大增强,Delphi的dbExpress中提供了DBXJSON,和DBXJSONReflect两个单元,可提供JSON序列化
下面的例子是实现Delphi实体对象转换为JSON字符串,以及JSON字符串转换为Delphi 实体对象的示例:(在Delphi XE3测试通过)
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.
相关文章
- Java 常见数据交换格式——xml、json、yaml
- 报错需要选择一个空目录,或者选择的非空目录下存在 app.json 或者 project.config.json解决方案
- Newtonsoft.Json序列化和反序列之javascriptConvert.SerializeObject,DeserializeObject,JsonWriter,JsonReader
- json字符串生成C#实体类的工具
- mac 程序 Access-JSON-Data
- Json模块dumps、loads、dump、load函数介绍
- 在JavaScript中使用json.js:使得js数组转为JSON编码
- [Docker] Modify a JSON Configuration File with jq
- Laravel5设计json api时候的一些道道
- 深入浅出JSON[转]
- 在JavaScript中使用json.js:使得js数组转为JSON编码
- 一个好用的json文件本地查看工具 - JSON viewer
- Flutter拓展 将Flutter或Dart的JSON数据自动生成模型类
- Flutter高级第2篇:JSON的序列化和反序列化、创建模型类转换Json数据
- 今天,念念不忘一件事... ✅在使用Fastjson-JSON#toJSONString序列化对象时,如何截取比较长的属性值串?
- 【Groovy】json 序列化 ( 类对象转为 json 字符串 | 使用 JsonBuilder 进行转换 | 使用 JsonOutput 进行转换 | 将 json 字符串格式化输出 )
- 011-JSON、JSONObject、JSONArray使用、JSON数组形式字符串转换为List<Map<String,String>>的8种方法
- js 数组、对象转json 以及json转 数组、对象
- NHibernate3.3的数据模型用Json.net4.5序列化
- Flask设置返回json格式数据
- json 模块:处理 JSON 数据
- jQuery ajax读取本地json文件_jQuery请求本地JSON文件,在谷歌浏览器运行时报跨域错误_Vscode使用Live Server
- Jackson转换json大写_关于jackson转化json的原理_jackson序列化和反序列化Json