2010-05-21 45 views
4

我有一个对象,有一些TObjectList <>我尝试编码为JSON的字段,其格式为SuperObject德尔福Superobject,json的通用列表

TLogs = TObjectList<TLog>; 
TMyObject = class(TObject) 
private 
    FLogs: TLogs; 
end; 

深入SuperObjects代码中,有一个ToClass过程,迭代字段并将它们添加到json结果中。

在此循环中,检查TRttiFields FieldType。如果它为零,则跳过对象。

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 

我的泛型列表字段的FieldType为nil。为什么?

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

回答

7

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

TLogs = class(TObjectList<TLog>); 

希望这将在下一个版本中得到解决。

+0

+1:这个问题是否受到Embarcadero的支持? – menjaraz 2012-04-10 05:46:13

+0

@menjaraz:据我所知,它还没有。 – 2012-04-10 11:50:43

+0

谢谢你的回答。 – menjaraz 2012-04-10 12:04:22