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对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言 ...
随机推荐
- 深入理解http协议的特点
HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1.支持客户/服务器模式:2.简单快速:3.灵活:4.无连接:5.无状态. 无连接 无连接的含义是限制每次连接只处理一个请求. ...
- 并发包CallableAndFuture
/** * * @描述: Callable Future * * 程序运行一个线程,线程运行结束后,我们可以获取另一个线程的结果 * * @作者: Wnj . * @创建时间: 2017年5月16日 ...
- SQL Server ->> Enable Instant File Initialization(开启文件及时初始化)
我们在安装SQL Server的时候会在指定SQL Server各个服务的运行启动账户的账户的时候看到底下有一个选项写着“Grant Perform Volume Maintenance Task p ...
- SQL Server ->> Database Snapshot(数据块快照)
Comming soon!!! 参考文献: View the Size of the Sparse File of a Database Snapshot 数据库快照 (SQL Server) 创建数 ...
- java、C语言实现数组模拟栈
java: public class ArrayStack { private int[] data; private int top; private int size; public ArrayS ...
- request.getParameterMap和request.getParameter不一样的显示
public class KeywordUtil { /** * 只提q参数关键字 * * @param request * @return 处理后的关键字Str ...
- Spring 整合Hibernate 示例
虽然Spring整合Hibernate早就会了,但经常在创建项目整合这两个框架的时候出一些低级错误.所以在这里写一个示例,以后再遇到错误时,再把遇到的错误或异常添加上. 一.创建一个动态WEB工程,添 ...
- C/C++心得-理解指针
上一篇笔者用自己那不是怎么好理解的逻辑介绍了内存和C中的基本数据类型,现在笔者再根据自己重新所学来说说C语言中的指针. 理解指针才能真正的算C语言入门.也许是我大学期间太关注前端UE,也许是当初开始学 ...
- Centos 7 安装Anaconda3
1.首先下载地址: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 使用清华镜像下载速度快 2.安装 bash Anaconda3-5.1 ...
- DataTable和Json的相互转换
1 #region DataTable 转换为Json字符串实例方法 2 /// <summary> 3 /// GetClassTypeJosn 的摘要说明 4 /// </sum ...