我正在尝试将对象转换为Json字符串。我看到一个TJson::ObjectToJsonString()似乎可以满足需要,但似乎不起作用。我在Delphi中有确切的代码,没有问题。因此,显然在C ++方面还需要做更多的事情。

class TData : public TObject
{
private:
  String FName;
public:
__property String Name = {read=FName, write=FName};
};
//----------------------------------------------------------------


实施...

  TData *data = new TData();

  data->Name = "A Test Name";

  mmMessage->Lines->Add(TJson::ObjectToJsonString(data));


我得到输出{}

最佳答案

ObjectToJsonObject()忽略属性,它仅封送字段,并且足够聪明,可以从字段名称中删除前导F。这就是为什么您的FName字段在Delphi代码中被编组为Name的原因。请参见Convert an object instance into a JSON string and making use of custom attributes,它详细介绍了该主题(它适用于Delphi,但也适用于C ++ Builder)。

由于您的Name属性按原样相当无用,因此您最好将Name设置为公共字段而不是属性:

class TData : public TObject
{
public:
  String Name;
};


还要确保将您的项目设置为为您的TData类生成RTTI。尝试用__declspec(delphirtti)进行标记,例如:

class __declspec(delphirtti) TData : public TObject
{
public:
  String Name;
};


并确保您没有通过#pragma explicit_rtti明确禁用RTTI。

10-08 07:29
查看更多