You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi XE4使用TSuperObject实现JSON转自定义类对象的方法咨询

实现方案

TSuperObject的TSuperRttiContext提供了与AsJson<T>对应的AsType<T>泛型方法,可直接实现JSON字符串到对象的反序列化,具体实现步骤如下:


1. 补充类的无参构造函数

TSuperObject通过RTTI创建类实例时默认调用无参构造函数,你需要先给两个类补充无参构造,避免反序列化报错:

TAspTransactionBasicData = Class(TObject)
  Currency          : Byte;                     
  Amount            : Currency;
  // 新增无参构造,和原有带参构造成重载关系
  constructor Create; overload;
  constructor Create(aCurrency: Byte; aAmount: Currency); overload;
end;

TStartWorkflowWithBasicData  = Class(TObject)
  AdditionalData    : TAspTransactionBasicData;
  TypeOfWorkflow    : Byte;
  // 新增无参构造,和原有带参构造成重载关系
  constructor Create; overload;
  constructor Create(aAdditionalData: TAspTransactionBasicData; aTypeOfWorkflow: Byte); overload;
  function            toJSon(AObject:TStartWorkflowWithBasicData):String;
  // 新增反序列化类方法,入参为JSON字符串,返回目标对象实例
  class function      fromJson(const jsonStr: String): TStartWorkflowWithBasicData;
end;

// 无参构造实现示例
constructor TAspTransactionBasicData.Create;
begin
  inherited Create;
end;

constructor TStartWorkflowWithBasicData.Create;
begin
  inherited Create;
end;

2. 实现fromJson方法

class function TStartWorkflowWithBasicData.fromJson(const jsonStr: String): TStartWorkflowWithBasicData;
var
  RttiCont: TSuperRttiContext;
  jsonObj: ISuperObject;
begin
  Result := nil;
  RttiCont := TSuperRttiContext.Create;
  try
    // 将JSON字符串解析为ISuperObject对象
    jsonObj := TSuperObject.ParseString(PChar(jsonStr), False);
    if not Assigned(jsonObj) then Exit;
    // 调用AsType泛型方法完成反序列化
    Result := RttiCont.AsType<TStartWorkflowWithBasicData>(jsonObj);
  finally
    RttiCont.Free;
  end;
end;

3. 调用示例及内存管理说明

反序列化生成的类实例完全由程序控制生命周期,使用完需要手动释放避免内存泄漏:

var
  workflowObj: TStartWorkflowWithBasicData;
begin
  workflowObj := TStartWorkflowWithBasicData.fromJson('待反序列化的JSON字符串');
  try
    // 此处编写业务逻辑代码
  finally
    // 先释放内部嵌套的TAspTransactionBasicData实例,再释放外层对象
    workflowObj.AdditionalData.Free;
    workflowObj.Free;
  end;
end;

内容的提问来源于stack exchange,提问作者John Sebik Hook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:15:04