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. Tomcat下JDBC连接样例

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  2. 浅谈 @RequestParam 和@PathVariable

    版权声明:本文为博主原创文章,如果对你有用,敬请带走! https://blog.csdn.net/chuck_kui/article/details/55506723 首先 上两个地址: 地址①ht ...

  3. DBMS_SQLTUNE使用方法

    SQL调优工具包DBMS_SQLTUNE的使用方法 oracle 提供了优化建议功能包DBMS_SQLTUNE,该包可以帮助我们分析SQL,并提供优化建议. 原有执行计划alter session s ...

  4. ZT sem_init sem_wait sem_post sem_destroy

    sem_init() 2009-06-26 16:43:11|  分类: linux |字号 订阅       信号量的数据类型为结构sem_t,它本质上是一个长整型的数.函数sem_init()用来 ...

  5. 一些jar包的作用

    发项目的过程中,经常需要用到一写jar包,现在对其中的一写jar的作用,做下总结,也算是避免少引或者多引jar包吧,欢迎大家补充.谢谢. 1.apache的一写jar commons-collecti ...

  6. 洛谷 P4321 【随机漫游】

    题目大意 给出\(n(n\leq 18)\)个点的无向连通图,\(m(m\leq 10^5)\)次询问.每次询问给出一个点集和一个起点\(s\),询问从\(s\)出发,经过这个点集中的每一个点至少一次 ...

  7. 简要总结 数据仓库VS数据库

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wl101yjx/article/details/31015367 本文简要总结以下两个问题,旨在高速 ...

  8. Powershell split file

    #网上所得非原创 function split($inFile, $outPrefix, [Int32] $bufSize){ $stream = [System.IO.File]::OpenRead ...

  9. Cow Relays 【优先队列优化的BFS】USACO 2001 Open

    Cow Relays Time Limit: 1000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Tota ...

  10. 在Windows 7和10上显示上次登录帐户信息

    组策略: 计算机配置->管理模板->Windows组件->Windows登录选项 现在注销并重新登录以查看会发生什么. 在进入桌面之前,用户必须确认该消息 注册表: 打开: &quo ...