JSON与Delphi Object的互换
Delphi自从增强了RTTI后,语言的可灵活性多大增强,Delphi的dbExpress中提供了DBXJSON,和DBXJSONReflect两个单元,可提供JSON序列化
下面的例子是实现Delphi实体对象转换为JSON字符串,以及JSON字符串转换为Delphi 实体对象的示例:(在Delphi XE3测试通过)
unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
DBXJSON, DBXJSONReflect; type
TPerson = class(TObject)
public
Name: String;
Password: String;
Age: Integer;
end; TForm2 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
function ObjectToJSON(AData: TObject): TJSONValue;
function JSONToObject(AJSONValue: TJSONValue): TObject;
public
end; var
Form2: TForm2; implementation {$R *.dfm} function TForm2.JSONToObject(AJSONValue: TJSONValue): TObject;
var
lUnMarshal: TJSONUnMarshal;
begin
lUnMarshal := TJSONUnMarshal.Create();
try
Result := lUnMarshal.Unmarshal(AJSONValue);
finally
FreeAndNil(lUnMarshal);
end;
end; function TForm2.ObjectToJSON(AData: TObject): TJSONValue;
var
lMarshal: TJSONMarshal;
begin
lMarshal := TJSONMarshal.Create();
try
Result := lMarshal.Marshal(AData);
finally
FreeAndNil(lMarshal);
end;
end; procedure TForm2.FormCreate(Sender: TObject);
var
lPerson: TPerson;
lJSONValue: TJSONValue;
const
lJSONString: String = '{"type":"Unit2.TPerson","id":1,"fields":{"Name":"Hezihang","Password":"123","Age":23}}';
begin
Memo1.Lines.Clear;
/// Object Convert to JSON
Memo1.Lines.Add('Object to JSON String');
Memo1.Lines.Add('--------------------------------------');
Memo1.Lines.Add('');
lPerson := TPerson.Create;
lPerson.Name := 'Hezihang';
lPerson.Password := '';
lPerson.Age := ;
lJSONValue := ObjectToJSON(lPerson);
FreeAndNil(lPerson);
Memo1.Lines.Add(lJSONValue.ToString);
lJSONValue.Free;
Memo1.Lines.Add('');
Memo1.Lines.Add('--------------------------------------');
/// JSON Convert to Object
Memo1.Lines.Add('');
Memo1.Lines.Add('JSON String'' To a Class Instance''');
Memo1.Lines.Add('--------------------------------------');
Memo1.Lines.Add('');
lJSONValue := TJSONObject.ParseJSONValue(lJSONString);
lPerson := JSONToObject(lJSONValue) as TPerson;
lJSONValue.Free;
Memo1.Lines.Add('Name: ' + lPerson.Name);
Memo1.Lines.Add('Password: ' + lPerson.Password);
Memo1.Lines.Add('Age: ' + IntToStr(lPerson.Age));
lPerson.Free;
Memo1.Lines.Add('');
Memo1.Lines.Add('--------------------------------------');
end; end.
JSON与Delphi Object的互换的更多相关文章
- Poco::JSON::Array 中object 设置preserveInsertionOrder 时,stringify出错-->深入解析
在使用poco version 1.6.0时 Poco::JSON::Array 在object 设置preserveInsertionOrder =true 时 调用 array.stringif ...
- 玩转Web之Json(四)---json与(Object/List/Map)的相互转化
在做web应用时,经常需要将json转化成Object/list/map或者将Object/List/map转化成json,通过简单封装可以在写代码是减轻很多负担.本文将给出json转化的一系列方法. ...
- 有趣Web之Json(四)---json与(Object/List/Map)相互转化
干web报名时间.通常,他们需要json转换为Object/list/map要么Object/List/map转换为json,由能够编写代码的简单包装非常多,以减轻负担. 本文将给出json的一系列的 ...
- Jackson将json string转为Object,org.json读取json数组
从json文件读取json string或者自定义json string,将其转为object.下面采用的object为map,根据map读取json的某个数据,可以读取第一级的数据name,后来发现 ...
- Error-ASP.NET:无效的 JSON 基元: object。
ylbtech-Error-ASP.NET:无效的 JSON 基元: object. 1.返回顶部 1. “/”应用程序中的服务器错误. 无效的 JSON 基元: object. 说明: 执行当前 ...
- json字符串和object之间的相互转化
package asi; import java.util.ArrayList; import com.alibaba.fastjson.JSON; import com.alibaba.fastjs ...
- Android Parsing between JSON and Kotlin Object with Google Gson Library
Parsing between JSON and Kotlin Object with Google Gson Library dependencies { ... implementation 'c ...
- C#-使用Newtonsoft.Json实现json字符串与object对象互转
json字符串转object对象: IF004Response processResponse = JsonConvert.DeserializeObject<IF004Response> ...
- JSON: JavaScript Object Notation
JSON是JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式.1) JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言 ...
随机推荐
- SQL Server ->> SQL Server 2016新特性之 -- Dynamic Data Masking
Dynamic Data Masking是为了防止敏感数据暴露给未经授权的用户,以一种最小开销和维护成本的形式.Dynamic Data Masking用于表的字段,相当于盖住字段数据的一部分.比如一 ...
- OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream-四种复制方式-单层文件夹复制
字节流两套: java.lang.Object--java.io.OutputStream--java.io.FileOutputStream java.lang.Ob ...
- JavaScript检测数据类型
JavaScript检测数据类型 标签(空格分隔): JavaScript function valType(value) { return Object.prototype.toString.cal ...
- JavaScript函数的声明与调用方式
入职第一天小记 对于初入前端的程序猿来说,对于函数的理解与使用可谓是相当浅薄的,回顾这自己近几年的工作以及学习经历,准备对JavaScript来个系统的总结. 如果要我们对H5中的表单做个简单的校验, ...
- Python迭代(入门8)
转载请标明出处: http://www.cnblogs.com/why168888/p/6407980.html 本文出自:[Edwin博客园] Python迭代 1. 什么是迭代 注意: 集合是指包 ...
- AngularJS中页面传参方法
1.基于ui-router的页面跳转传参 (1) 用ui-router定义路由,比如有两个页面,一个页面(producers.html)放置了多个producers,点击其中一个目标,页面跳转到对应的 ...
- jq仿 妙味课堂导航01
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Java虚拟机5:常用JVM命令参数
这里汇总一些平时用到的.看到的一些虚拟机参数: (1)-Xms20M 表示设置堆容量的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置堆容量的最大值为20M,必须以M为单位.将-Xmx和 ...
- hbase hfilev2
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014393917/article/details/25508809 HFileV2文件 HFile ...
- Yii 集成 PHPExcel读取Excel文件
PHPexcel官方下载以后,放入Yii的protected\extensions\phpexcel下面 try { spl_autoload_unregister(array('YiiBase', ...