4

SuperObjectのヘルプを使用してJSONとしてエンコードしようとするTObjectList<>フィールドを持つオブジェクトがあります。

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

SuperObjectsコードの奥深くに、ToClassプロシージャがあり、フィールドを繰り返してjsonの結果に追加します。

このループでは、TRttiFieldsFieldTypeがチェックされます。nilの場合、オブジェクトをスキップします。

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にオブジェクトのリストをシリアル化するにはどうすればよいですか?

4

1 に答える 1

7

これは、Delphi の RTTI 作成における既知の問題です。そのようにジェネリック クラスを宣言すると、機能しません。classキーワードを使用する必要があります。

TLogs = class(TObjectList<TLog>);

うまくいけば、これは次のリリースで修正されるでしょう。

于 2010-05-21T14:25:28.847 に答える