anchor.diff:    end;
   end;
   
  +procedure TSvAbstractSerializer<T>.SetClassProperties(var AValue: TValue; var ASkip: Boolean;
  +  AType: TRttiType; AObjectToEnumerate: T);
  +var
  +  i: Integer;
  +  LCurrProp: TRttiProperty;
  +  LEnumerator: TArray<TEnumEntry<T>>;
  +begin
  +  LEnumerator := EnumerateObject(AObjectToEnumerate);
  +  for i := 0 to Length(LEnumerator) - 1 do
  +  begin
  +    LCurrProp := AType.GetProperty(LEnumerator[i].Key);
  +    if Assigned(LCurrProp) then
  +    begin
  +      if IsTransient(LCurrProp) then
  +      begin
  +        Continue;
  +      end;
  +      LCurrProp.SetValue(GetRawPointer(AValue), SetValue(LEnumerator[i].Value, AValue, LCurrProp,
  +        LCurrProp.PropertyType, ASkip));
  +    end;
  +  end;
  +end;
  +
   procedure TSvAbstractSerializer<T>.SetRootObj(const Value: T);
   begin
     FRootObj := Value;
  
positive.code:         ASkip := True;
        end;
      end;
    end;  
  end;
  
  function TSvAbstractSerializer<T>.DoSetFromString(AJsonString: T; AType: TRttiType;
  
negative.code: function TSvAbstractSerializer<T>.DoSetFromArray(AJsonArray: T; AType: TRttiType;
    const AObj: TValue; AProp: TRttiProperty; var ASkip: Boolean): TValue;
  var
    arrVal: array of TValue;
    i: Integer;
    LObject: TObject;
    LValue: TValue;
    bCreated: Boolean;
  begin
    bCreated := False;
    LValue := TValue.Empty;
    if Assigned(AType) then
    begin
      case AType.TypeKind of
        tkArray:
        begin
          SetLength(arrVal, GetArraySize(AJsonArray));
          for i := 0 to Length(arrVal)-1 do
          begin
            arrVal[i] := SetValue(GetArrayElement(AJsonArray, i), AObj, AProp, TRttiArrayType(AType).ElementType, ASkip);
          end;
          Result := TValue.FromArray(AType.Handle, arrVal);
        end;
        tkDynArray:
        begin
          SetLength(arrVal, GetArraySize(AJsonArray));
          for i := 0 to Length(arrVal)-1 do
          begin
            arrVal[i] := SetValue(GetArrayElement(AJsonArray, i), AObj, AProp, TRttiDynamicArrayType(AType).ElementType, ASkip);
          end;
          Result := TValue.FromArray(AType.Handle, arrVal);
        end;
        tkClass, tkInterface:
        begin
          if not Assigned(AType) then
            Exit;
  
          if not Assigned(AProp) then
          begin
            //if AProp not assigned then we must create it
            if AType.IsInstance then
            begin
              LObject := TSvRttiInfo.CreateType(AType.Handle);
              if Assigned(LObject) then
              begin
                LValue := LObject;
                bCreated := True;
              end;
            end;
          end
          else
          begin
            Result := TSvRttiInfo.GetValue(AProp, AObj);
            if (Result.IsObject) and (Result.AsObject is TDataSet) then
            begin
              DeserializeDataset(AJsonArray, Result);
              Exit;
            end;
          end;
  
          if TryDeserializeContainer(AJsonArray, LValue, AType, bCreated, AProp, AObj, ASkip) then
          begin
            if bCreated then
            begin
              Result := LValue;
              ASkip := False;
              Exit;
            end;
          end;
          ASkip := True;
        end
        else
        begin
          ASkip := True;
          PostError('Cannot assign array data to non array type');
        end;
      end;
    end;
  