@@ -620,10 +620,11 @@ function TRTTIJson.DeserializeList(aObject: TObject; const aName : string; const
620620 i : Integer;
621621 n : Integer;
622622 rProp : TRttiProperty;
623- { $IFNDEF DELPHIRX10_UP}
623+ { $IFDEF DELPHIRX10_UP}
624+ rMethod: TRttiMethod;
625+ { $ELSE}
624626 rfield : TRttiField;
625627 { $ENDIF}
626- genericType : TGenericListType;
627628begin
628629 Result := aObject;
629630
@@ -654,17 +655,20 @@ function TRTTIJson.DeserializeList(aObject: TObject; const aName : string; const
654655 if not rValue.IsEmpty then
655656 begin
656657 { $IFDEF DELPHIRX10_UP}
657- if (TObjectList<TObject>( aObject) <> nil ) and (rvalue.IsArray) then
658+ if (aObject <> nil ) and (rvalue.IsArray) then
658659 begin
659- genericType := GetGenericListType(aObject);
660- if genericType = TGenericListType.gtObjectList then TObjectList<TObject>(aObject).Clear
661- else TList<TObject>(aObject).Clear;
660+ rMethod := ctx.GetType(aObject.ClassType).GetMethod(' Clear' );
661+ if rMethod = nil then
662+ raise EJsonDeserializeError.Create(' Unable to find RTTI method' );
663+ rMethod.Invoke(aObject, []);
664+
665+ rMethod := ctx.GetType(aObject.ClassType).GetMethod(' Add' );
666+ if rMethod = nil then
667+ raise EJsonDeserializeError.Create(' Unable to find RTTI method' );
668+
662669 n := rvalue.GetArrayLength - 1 ;
663670 for i := 0 to n do
664- begin
665- if genericType = TGenericListType.gtObjectList then TObjectList<TObject>(aObject).Add(rvalue.GetArrayElement(i).AsObject)
666- else TList<TObject>(aObject).Add(rvalue.GetArrayElement(i).AsObject);
667- end ;
671+ rMethod.Invoke(aObject, [rvalue.GetArrayElement(i)]);
668672 end ;
669673 { $ELSE}
670674 n := 0 ;
@@ -1256,7 +1260,7 @@ function TRTTIJson.SerializeObject(aObject: TObject): TJSONObject;
12561260 // get list array
12571261 propvalue := GetPropertyValueFromObject(aObject,' List' );
12581262 { $IFDEF DELPHIRX10_UP}
1259- Result := TJSONObject(SerializeDynArray(propvalue,TList<TObject>(aObject).Count ));
1263+ Result := TJSONObject(SerializeDynArray(propvalue));
12601264 { $ELSE}
12611265 Result := TJSONObject(SerializeValue(propvalue));
12621266 { $ENDIF}
0 commit comments