2011-10-11 64 views
3

我试图列出项目可能包含的可能类型。但是我陷入了困境,我无法调用Item.GetType()来遍历它的Attributes,因为这只会返回它已经包含的类型的属性。使用反射为单个属性获取XmlElementAttribute的每个实例

我已经试过TypeDescriptor.GetProperties(...)但属性容器只包含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; 
     } 
    } 

回答

6

您不能对此使用TypeDescriptor,因为System.ComponentModel总是折叠属性。您必须使用PropertyInfoAttribute.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)); 
+0

非常感谢您!作品一种享受。 – Jaaaaaay

相关问题