在C ++中通过JSON使用Delphi序列化

时间:2019-03-06 14:32:24

标签: delphi c++builder

知道C ++没有反射,我看了看Delphi技术,发现了一个使用REST.JSON库进行序列化的示例:Convert Object to JSON ...

现在,我想在我的C ++代码中使用一个Delphi类,该类可以使用提供的方法进行序列化和反序列化:

TFoo = class(TObject)
private
public
  Fa: Integer;
  Fb: Double;
end;

在C ++单元中,类被序列化和反序列化,如下所示:

#include <REST.Json.hpp>
#include "TestJson.hpp" //Contains TFoo

TFoo* foo = new TFoo(); 
foo->Fa = 1;
foo->Fb = 0.999;
String json = TJson::ObjectToJsonString(foo); //Works
delete foo;
foo = TJson::JsonToObject<TFoo*>(json); //Doesn't work
delete foo;

序列化工作正常,但是调用TJson::JsonToObject会导致链接器错误。一点研究表明,在将Delphi泛型与C ++ How to Handle Delphi Generics in C++结合使用时,这是可以预期的。

它说实例化必须在Delphi端完成,所以我在Delphi单元中添加了一个函数:

function GetObj(Json: string) : TFoo;
begin
  Result := TJson.JsonToObject<TFoo>(Json);
end; 

此链接有效后,但在运行代码时发生以下错误:

  

... EConversionError ...无法初始化类型TestJson.TFoo ...

从另一个Delphi单元调用该函数时,它可以正常工作。

调试Embarcadero代码表明,这是由于缺少类型信息而发生的。

有什么办法可以使它正常工作吗?

0 个答案:

没有答案