У меня есть класс с опубликованными реквизитами, которые я сериализую в XML.
MyAttr = class(TCustomAttribute)
private
FName: string;
public
constructor Create(const Name: string);
property Name: string read FName write FName;
end;
MyClass = class(TPersistent)
private
FClassCaption: string;
published
[MyAttr('Class')]
property ClassCaption: string read FClassCaption write FClassCaption;
end;
Поскольку размер XML имеет решающее значение, я использую атрибуты, чтобы дать более короткое имя для свойства (т. Е. Я не могу определить свойство с именем'Учебный класс').Сериализация реализована следующим образом:
lPropCount := GetPropList(PTypeInfo(Obj.ClassInfo), lPropList);
for i := 0 to lPropCount - 1 do begin
lPropInfo := lPropList^[i];
lPropName := string(lPropInfo^.Name);
if IsPublishedProp(Obj, lPropName) then begin
ItemNode := RootNode.AddChild(lPropName);
ItemNode.NodeValue := VarToStr(GetPropValue(Obj, lPropName, False));
end;
end;
Мне нужно условие вроде: если свойство помечено MyAttr, вместо «lPropInfo ^ .Name» получите «MyAttr.Name».