我们发现Delphi XE存在问题,有时TRttiType.GetTypes
会返回一个空数组。其他时候,使用完全相同的代码,数组包含预期的类型。使用TJSONMarshal
和TJSONUnMarshal
通过DataSnap编组/解组类时发生错误。
知道为什么在下面单元中调用GetTypes
会返回一个空数组? (不应该要求$M
指令。正是因为我尝试了几种蛮力方法,包括$STRONGLINKTYPES
。)
unit uTest;
interface
uses
Classes;
type
{$M+}
TMyClass = class(TPersistent)
public
Value1 : Integer;
Value2 : String;
Value3 : Currency;
Value4 : Boolean;
Value5 : Double;
end;
procedure Test;
implementation
uses
Dialogs, Rtti, SysUtils;
procedure Test;
var
c: TRttiContext;
t: TRttiType;
a: TArray<TRttiField>;
begin
c := TRttiContext.Create;
t := c.GetType(TypeInfo(TMyClass));
if Assigned(t) then begin
a := t.GetFields;
ShowMessage(IntToStr(High(a)));
end
else
ShowMessage('TMyClass not found');
end;
procedure ForceReferenceToClass(C: TClass);
var
dummy: TObject;
begin
dummy := C.Create();
dummy.Free();
end;
initialization
ForceReferenceToClass(TMyClass);
end.
由于