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的互换的更多相关文章

  1. Poco::JSON::Array 中object 设置preserveInsertionOrder 时,stringify出错-->深入解析

    在使用poco version 1.6.0时 Poco::JSON::Array 在object  设置preserveInsertionOrder =true 时 调用 array.stringif ...

  2. 玩转Web之Json(四)---json与(Object/List/Map)的相互转化

    在做web应用时,经常需要将json转化成Object/list/map或者将Object/List/map转化成json,通过简单封装可以在写代码是减轻很多负担.本文将给出json转化的一系列方法. ...

  3. 有趣Web之Json(四)---json与(Object/List/Map)相互转化

    干web报名时间.通常,他们需要json转换为Object/list/map要么Object/List/map转换为json,由能够编写代码的简单包装非常多,以减轻负担. 本文将给出json的一系列的 ...

  4. Jackson将json string转为Object,org.json读取json数组

    从json文件读取json string或者自定义json string,将其转为object.下面采用的object为map,根据map读取json的某个数据,可以读取第一级的数据name,后来发现 ...

  5. Error-ASP.NET:无效的 JSON 基元: object。

    ylbtech-Error-ASP.NET:无效的 JSON 基元: object.  1.返回顶部 1. “/”应用程序中的服务器错误. 无效的 JSON 基元: object. 说明: 执行当前 ...

  6. json字符串和object之间的相互转化

    package asi; import java.util.ArrayList; import com.alibaba.fastjson.JSON; import com.alibaba.fastjs ...

  7. Android Parsing between JSON and Kotlin Object with Google Gson Library

    Parsing between JSON and Kotlin Object with Google Gson Library dependencies { ... implementation 'c ...

  8. C#-使用Newtonsoft.Json实现json字符串与object对象互转

    json字符串转object对象: IF004Response processResponse = JsonConvert.DeserializeObject<IF004Response> ...

  9. JSON: JavaScript Object Notation

    JSON是JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式.1) JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言 ...

随机推荐

  1. C#中的多线程 - 高级多线程 z

    原文:http://www.albahari.com/threading/part4.aspx 专题:C#中的多线程 1非阻塞同步Permalink 之前,我们描述了即使是很简单的赋值或更新一个字段也 ...

  2. Threading in C# 5

    Part 5: Parallel Programming In this section, we cover the multithreading APIs new to Framework 4.0 ...

  3. 【Leetcode】【Medium】Permutations

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  4. CVE-2016-3231

    摘要:重现了下韩国小哥Lokihardt在pwn2own上的过沙箱提权漏洞. 1 #include <windows.h> 2 #include <atlbase.h> 3 # ...

  5. VMware安装VMware tool后mount /dev/cdrom /mnt成功挂载含rpm包的镜像

    安装虚拟机后如果不安装vmware tool使用mount /dev/cdrom /mnt可以成功挂在含rpm包的镜像,但是安装VMware tool后挂在后/mnt中是错误的内容.查了半天后无果,自 ...

  6. jQuery ajax从后台取不到数据

    ajax post  data  获取不到数据,注意 content-type的设置 .post/get 关于 jQuery data 传递数据.网上各种获取不到数据,乱码之类的. 好吧今天我也遇到了 ...

  7. NO.012-2018.02.17《题都城南庄》唐代:崔护

    题都城南庄_古诗文网 题都城南庄 唐代:崔护 去年今日此门中,人面桃花相映红.去年春天,就在这扇门里,姑娘脸庞,相映鲜艳桃花.人面:指姑娘的脸.第三句中“人面”指代姑娘. 人面不知何处去,桃花依旧笑春 ...

  8. jasmine —— Spies(转)

    Jasmine有称为间谍(spies)的测试双重功能.一个spy可以监测任何函数的调用和参数的调用痕迹.Spy只能存在于定义它的describe()和it()代码块内,而在每一个spec(即it)结束 ...

  9. Hibernate双向一对多、双向多对多关联关系中的映射文件怎么写

    这里以一对多关联关系为例.以Country类为一端,Competition类为多端. 一个国家可以有多个赛事,但是一个赛事只能属于一个国家. Country类 public class Country ...

  10. 第三方库RATreeView的使用记录

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u012951123/article/details/36421939 由于项目须要用到树状列表,能够 ...