anchor.diff:    i: Integer;
     LField: TRttiField ;
     LRecordType: TRttiRecordType ;
  -  LCurrProp: TRttiProperty;
     LObject: TObject;
  -  LJsonObject: T;
     LEnumerator: TArray<TEnumEntry<T>>;
   begin
     if Assigned(AType) then
     begin
  -    LJsonObject := AJsonObject;
       case AType.TypeKind of
         tkRecord:
         begin
           TValue.MakeWithoutCopy(nil, AType.Handle, Result);
           LRecordType := TSvRttiInfo.GetType(AType.Handle).AsRecord;
   
  -        LEnumerator := EnumerateObject(LJsonObject);
  -        
  +        LEnumerator := EnumerateObject(AJsonObject);
           for i := 0 to Length(LEnumerator) - 1 do
           begin
  -          //search for property name             
  +          //search for property name
             LField := FindRecordFieldName(LEnumerator[i].Key, LRecordType);
             if Assigned(LField) then
             begin
               {DONE -oLinas -cGeneral : fix arguments}
  -            LField.SetValue(Result.GetReferenceToRawData,
  +            LField.SetValue(GetRawPointer(Result),
                 SetValue(LEnumerator[i].Value, AObj, nil, LField.FieldType, ASkip));
             end;
           end;
         end;
         tkClass:
         begin
  -        //AType := TSvRttiInfo.GetType(AType.Handle);
  -        if Assigned(AProp) and (AObj.AsObject <> nil) then
  +        if Assigned(AProp) and ( (AObj.IsObject) and (AObj.AsObject <> nil)) then
           begin
             Result := TSvRttiInfo.GetValue(AProp, AObj);
             if (Result.IsObject) and (Result.AsObject = nil) then
             begin
               Result := TSvRttiInfo.CreateType(AType.Handle);
             end;
  -
  -          LEnumerator := EnumerateObject(LJsonObject);           
  -          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(Result), SetValue(LEnumerator[i].Value, Result {AObj}, LCurrProp,
  -                LCurrProp.PropertyType, ASkip));
  -            end;
  -          end;
  -         //  Result := AProp.GetValue(AObj);
  +          SetClassProperties(Result, ASkip, AType, AJsonObject);
           end
           else
           begin
  
positive.code: 
  function TSvAbstractSerializer<T>.DoGetFromClass(const AFrom: TValue; AProp: TRttiProperty): T;
  var
    i, iRecNo: Integer;
    LJsonArray: T;
    LJsonObject: T;
    LType, LEnumType: TRttiType;
    LEnumMethod, LMoveNextMethod: TRttiMethod;
    LEnumerator: TValue;
    LCurrentProp: TRttiProperty;
    LDst: TDataSet;
  begin
    Result := System.Default(T);
    LType := TSvRttiInfo.GetType(AFrom.TypeInfo);
  
negative.code:         ASkip := True;
        end;
      end;
    end;
  end;
  
  function TSvAbstractSerializer<T>.DoSetFromString(AJsonString: T; AType: TRttiType;
  