DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: webb123
今日帖子: 1
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 l_wming (L_Wming) ★☆☆☆☆ -
普通会员
2017/2/15 11:01:13
标题:
那位大神有JSON与结构数据(比如Record)通用互转的方法没? 浏览:4074
加入我的收藏
楼主: 那位大神有JSON与结构数据(比如Record)通用互转的方法没?
现在只能一个一个的拼接字符串
比如
women = record或class等
  name: string;
  age: integer;
end;
要转为JSON
----------------------------------------------
-
作者:
男 ying32 (唯有此生) ▲▲▲▲▲ -
普通会员
2017/2/15 11:03:21
1楼: 利用rtti啊, 很方便,如果再加上 泛型什么的就可以做到通用的函数。。
如果是使用superobject单元的话,他自带的有TSuperRttiContext,可以做得到,自己实现也容易
----------------------------------------------
一个热爱delphi的人,Golang GUI库。 --我的博客--
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2017/2/15 12:26:58
2楼: Xsuperobject
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 l_wming (L_Wming) ★☆☆☆☆ -
普通会员
2017/2/15 13:35:37
3楼: d7里面呢
----------------------------------------------
-
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2017/2/15 17:21:39
4楼: D7里面表面上Record是没有RTTI信息的,但是实际上是有的,只是它们不说。只是TypeInfo弄来弄去很麻烦,不如高版本的RTTI来的方便。
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
普通会员
2017/2/15 18:58:13
5楼: Delphi DataSet与JSON互转

DataSetConverter4Delphi

https://github.com/ezequieljuliano/DataSetConverter4Delphi
----------------------------------------------
-
作者:
男 kadin_lee (一路岁运) ▲▲▲▲▲ -
普通会员
2017/2/15 22:13:17
6楼: QJson 可以这样 
QJson := TQJson.Create;
QJson.FromRtti(结构体);

QJson.ToRtti(结构体)
即可。
非常方便 但是前提是 必须 delphi xe以上版本。
----------------------------------------------
用DELPHI 开发游戏!
作者:
男 FengLinYuShu (FengLinYuShu) ★☆☆☆☆ -
盒子活跃会员
2017/2/16 15:28:02
7楼: 学习了!
----------------------------------------------
-delphi大富翁论坛http://www.delphibbs.com
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2017/2/16 16:16:28
8楼: 如果想全自动,真正比较讨厌的是数组。
----------------------------------------------
-
作者:
男 mousesoft (MouseSoft) ★☆☆☆☆ -
盒子活跃会员
2017/2/17 18:19:45
9楼: 用一个循环把每一个PAIR的值存到一个Bytes,再附值给记录类型就可以了;
----------------------------------------------
-
作者:
男 lsuper (lsuper) ★☆☆☆☆ -
盒子活跃会员
2017/2/17 19:20:34
10楼: 基于这个

https://github.com/hgourvest/superobject

高版本(如 xe2)的 rtti + 泛型还是很爽的:

uses SuperObject;

function UnMarshalFromJson<T>(const AJson: ISuperObject): T;
var
  ctx: TSuperRttiContext;
  v: TValue;
begin
  Result := Default(T);
  if not Assigned(AJson) then
    Exit;
  ctx := TSuperRttiContext.Create;
  try
    if ctx.FromJson(TypeInfo(T), AJson, v) then
      Result := v.AsType<T>;
  finally
    ctx.Free;
  end;
end;
----------------------------------------------
-
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2017/7/7 14:41:30
11楼: 使用 D10.2

function JsonToObject<T>(const AJson: string): T;
var
  Serializer: TJsonSerializer;
begin
  Serializer := TJsonSerializer.Create;
  try
    Result := Serializer.Deserialize<T>(AJson);
  finally
    FreeAndNil(Serializer);
  end;
end;

function ObjectToJsonString<T>(AObject: T): string;
var
  Serializer: TJsonSerializer;
begin
  Serializer := TJsonSerializer.Create;
  try
    Result := Serializer.Serialize<T>(AObject);
  finally
    FreeAndNil(Serializer);
  end;
end;


var
   Women:TWomen;
   Json:string;
begin
   Women.name:='潘金莲';
   Women.age:=18; 
   
   //对象转Json
   Json:= ObjectToJsonString<TWomen>(Women);
   
   //Json转对象
   Women:= JsonToObject<TWomen>(Json);
end;
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2017/7/8 16:58:40
12楼: 小金莲二十三岁被武松干掉的。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
普通会员
2018/1/25 18:53:45
13楼: TJsonSerializer能在firemonkey Android下用吗
----------------------------------------------
-
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/1/25 19:39:24
14楼: @13楼,可以的,不过Android下面要把这个单元加入到工程里面,要不会提示找不到这个单元。算是个bug吧,唯独缺少Android的dcu
此帖子包含附件:
PNG 图像
大小:88.0K
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 ksrsoft (cb168) ★☆☆☆☆ -
普通会员
2018/1/27 12:09:31
15楼: 感谢14楼,添加到工程,可以用了
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行93.75毫秒 RSS