TypeDescriptor.AddAttributes и свойство

Возможно ли что-то подобное?

Есть класс с атрибутом [DataContract]. Этот класс имеет два свойства: одно — int, а другое — string. Есть два разных экземпляра этого класса.

Можно ли динамически присвоить атрибут [DataMember] только свойству int первого экземпляра и только строковому свойству второго экземпляра? Если да, не могли бы вы предоставить фрагмент?


person Greg    schedule 21.02.2012    source источник


Ответы (1)


Нет, вы не можете назначать атрибуты во время выполнения, не выполняя довольно сложную магию с динамической генерацией классов.

Хорошо, я не понимаю TypeDescriptor :) Итак, в общем случае вам нужно создать собственный ICustomTypeDescriptor и реализовать метод GetProperties для возврата PropertyDescriptor (следующий конструктор), расширяющий массив атрибутов.

static Attribute[] AddAttribute(Attribute[] attributes, Attribute attr) {
    Array.Resize(ref attributes, attributes.Length + 1);
    attributes[attributes.Length - 1] = new attr;
    return attributes;
}

public MyPropertyDescriptor(MemberDescriptor propDef)
       : base(propDef, AddAttribute(propDef.Attributes, new DataMembeAttribute()))
person Pavel Krymets    schedule 21.02.2012
comment
Вы не понимаете TypeDescriptor. - person leppie; 21.02.2012