我正在尝试获取记录字段的类型以创建正确的比较器(作为任何/几乎任何记录类型的通用解决方案).我找不到静态数组的类型信息:
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等一起使用的记录的比较器?
有没有办法转换这个记录
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()的函数?