相关疑难解决方法(0)

对于静态数组,使用RTTI获取记录字段类型失败

我正在尝试获取记录字段的类型以创建正确的比较器(作为任何/几乎任何记录类型的通用解决方案).我找不到静态数组的类型信息:

  TArrFieldTest = record
    a: string;
    b: array[0..3] of byte;
  end;

procedure Test;
var
  rttiContext: TRttiContext;
  rttiType: TRttiType;
  rttiFields: TArray<TRttiField>;
begin
  rttiType := rttiContext.GetType(TypeInfo(TArrFieldTest));
  rttiFields := rttiType.GetFields;
  Assert(rttiFields[0].FieldType<>nil); // it's ok
  Assert(rttiFields[1].FieldType<>nil); // fail here!
end;
Run Code Online (Sandbox Code Playgroud)

对于任何类型的静态数组,FieldType都是nil.任何想法在这里有什么不对?或者也许有更简单的方法来创建与TArray/TDictionary等一起使用的记录的比较器?

delphi rtti delphi-10-seattle

6
推荐指数
1
解决办法
930
查看次数

将记录转换为序列化表格数据以通过HTTP发送

有没有办法转换这个记录

TError = record
  code: Word;
  message: String;
end;

TState = record
  caption: String;
  address: Cardinal;
  counters: TArray<Word>;
  errors: TArray<TError>;
end;
Run Code Online (Sandbox Code Playgroud)

序列化Form Data string(Content-Type: application/x-www-form-urlencoded)之类的

caption=Foo&
address=175896&
counters[]=2&
counters[]=2&
errors[0][code]=52&
errors[0][message]=ERR_NOT_AVAILABLE
Run Code Online (Sandbox Code Playgroud)

通过HTTP发送?

也许有一些类似于JQuery.param()的函数?

delphi jquery serialization delphi-2010

3
推荐指数
1
解决办法
1188
查看次数