anchor.diff:        const AInputIsUTC: Boolean = False);
       procedure WriteUnixTimeValue(const AName: string; const AValue: TDateTime);
       procedure WriteTValue(const AName: string; const AValue: TValue);
  +    procedure WriteArrayValue(const AName: string; const AArray: TJSONArray); overload; inline;
  +    procedure WriteArrayValue<T: record>(const AName: string; const AArray: TArray<T>); overload; inline;
   
       property Values[const name: string]: Variant read GetValue; default;
   
  
positive.code:       const ADesiredType: TRttiType; const ANameCaseSensitive: Boolean = True): TValue; overload;
      function ReadValue(const AName: string; const ADesiredType: TRttiType;
        const ANameCaseSensitive: Boolean; out AValue: TValue): Boolean; overload;
      function ReadArrayValue(const AName: string): TJSONArray; overload;
      function ReadArrayValue<T: record>(const AName: string): TArray<T>; overload;
  
      procedure WriteStringValue(const AName: string; const AValue: string);
      procedure WriteIntegerValue(const AName: string; const AValue: Integer);
  
negative.code:   Result := ToRecord(TRttiContext.Create.GetType(TypeInfo(T)), AFilterProc).AsType<T>;
  end;
  
  procedure TJSONObjectHelper.WriteArrayValue(const AName: string;
    const AArray: TJSONArray);
  begin
    AddPair(AName, AArray);
  end;
  
  procedure TJSONObjectHelper.WriteArrayValue<T>(const AName: string;
    const AArray: TArray<T>);
  begin
    WriteArrayValue(AName, TJSONArray.ArrayOfRecordToJSON<T>(AArray));
  end;
  
  procedure TJSONObjectHelper.WriteBoolValue(const AName: string;
    const AValue: Boolean);
  var
  