使用反射获取单个属性的XmlElementAttribute的每个实例
本文关键字:XmlElementAttribute 实例 属性 反射 获取 单个 | 更新日期: 2023-09-27 18:10:55
我正在尝试列出Item可能包含的可能类型。然而,我被困在,我不能调用Item.GetType()来循环它的属性,因为这只会返回它已经包含的类型的属性。
我已经尝试过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;
}
}
你不能使用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));