Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi Superobject,json的通用列表_Json_Delphi_Generics_Rtti_Superobject - Fatal编程技术网

Delphi Superobject,json的通用列表

Delphi Superobject,json的通用列表,json,delphi,generics,rtti,superobject,Json,Delphi,Generics,Rtti,Superobject,我有一个对象,其中包含一些TObjectList字段,我尝试使用帮助表单将其编码为JSON TLogs=TObjectList; TMyObject=类(ToObject) 私有的 鞭笞:鞭笞; 结束; 在SuperObject代码的深处,有一个ToClass过程,迭代字段并将其添加到json结果中 在此循环中,检查TRttiFields字段类型。如果为零,则跳过对象 for f in Context.GetType(Value.AsObject.ClassType).GetFields do

我有一个对象,其中包含一些TObjectList字段,我尝试使用帮助表单将其编码为JSON

TLogs=TObjectList;
TMyObject=类(ToObject)
私有的
鞭笞:鞭笞;
结束;
在SuperObject代码的深处,有一个ToClass过程,迭代字段并将其添加到json结果中

在此循环中,检查TRttiFields字段类型。如果为零,则跳过对象

for f in Context.GetType(Value.AsObject.ClassType).GetFields do
  if f.FieldType <> nil then
  begin
    v := f.GetValue(value.AsObject);
    result.AsObject[GetFieldName(f)] := ToJson(v, index);
  end
用于Context.GetType(Value.AsObject.ClassType)中的f的

如果f.FieldType为nil,则
开始
v:=f.GetValue(value.AsObject);
result.AsObject[GetFieldName(f)]:=ToJson(v,index);
结束
我的常规列表字段的字段类型为nil。为什么?


如何使SuperObject序列化我的对象列表?

这是Delphi RTTI创建中的一个已知问题。如果这样声明泛型类,它将不起作用。您需要使用关键字

TLogs = class(TObjectList<TLog>);
TLogs=class(TObjectList);

希望在下一个版本中能解决这个问题。

@menjaraz:据我所知,还没有。
TLogs = class(TObjectList<TLog>);