3

Itemに含まれる可能性のあるタイプをリストしようとしています。ただし、 Item.GetType() を呼び出してその属性をループすることはできません。これは、既に含まれている型の属性を返すだけなのでです。

TypeDescriptor.GetProperties(...)を試しましたが、Attributes コンテナーには、プロパティ (この場合は WindowTemplate) に最後に適用されたXmlElementAttributeのインスタンスが 1 つしか含まれていません。

これは些細なことですが、オンラインで問題の解決策を見つけることができません。

    [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;
        }
    }
4

1 に答える 1

8

System.ComponentModel は常に属性を折りたたむため、これには TypeDescriptor を使用できません。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));
于 2011-10-11T22:44:41.533 に答える