Использование отражения для получения каждого экземпляра XmlElementAttribute для одного свойства - PullRequest
3 голосов
/ 12 октября 2011

Я пытаюсь перечислить возможные типы, которые Item может содержать.Однако я застрял в том, что я не могу вызвать Item.GetType (), чтобы перебрать его Атрибуты, так как это просто вернет атрибуты типа, который он уже содержал.

Я пытался TypeDescriptor.GetProperties (...) , но контейнер Attributes содержит только один экземпляр XmlElementAttribute , который является последним, примененным к свойству (WindowTemplateв данном случае)

Это должно быть тривиально, но я не могу найти решение своей проблемы в Интернете.

    [System.Xml.Serialization.XmlElementAttribute("ChildTemplate", typeof(ChildTmpl), Order = 1)]
    [System.Xml.Serialization.XmlElementAttribute("WindowTmeplate", typeof(WindowTmpl), Order = 1)]
    public object Item
    {
        get
        {
            return this.itemField;
        }
        set
        {
            this.itemField = value;
        }
    }

1 Ответ

7 голосов
/ 12 октября 2011

Вы не можете использовать TypeDescriptor для этого, так как System.ComponentModel всегда сворачивает атрибуты. Вы должны использовать PropertyInfo и Attribute.GetCustomAttributes(property, attributeType):

var property = typeof (Program).GetProperty("Item");
Attribute[] attribs = Attribute.GetCustomAttributes(
       property, typeof (XmlElementAttribute));

массив будет на самом деле будет XmlElementAttribute[], если это облегчит задачу:

XmlElementAttribute[] attribs = (XmlElementAttribute[])
     Attribute.GetCustomAttributes(property, typeof (XmlElementAttribute));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...