XmlElementは反映されます

これら2つのクラス

[XmlRoot("Root")]
public class VcRead
{
    [XmlElement("item")]
    public string[] Items;

    [XmlElement("amount")]
    public int Count;
}

public class KeyItem
{
    [XmlAttribute("id")]
    public int ID;

    [XmlAttribute("name")]
    public string Title;
}

今、私はすべてのフィールドとそのXmlマークを取得するために反射を使用したいと思います。 フィールドの名前とその値を取得するのは簡単です。 しかし、 "amount"のようなXmlElementの値を取得する方法

[XmlElement("amount")]
public int Count;
1
nl ru de
PropertyInfo型のGetCustomAttributesメソッド?
追加された 著者 tschmit007,

2 答え

XmlElementの代わりに、以下のようにXmlElementAttributeを使用します

[XmlElementAttribute("test")]
 public string Test  {get;set;};

次に、このオブジェクトのGetProperties()に反射を介してアクセスします

 PropertyInfo[] methods = typeof(KeyItem).GetProperties();


 foreach (PropertyInfo method in methods)
 {
 //Use of Attribute.GetCustomAttributes which you can access the attributes
    Attribute[] attribs = Attribute.GetCustomAttributes(method, typeof(XmlAttribute));
 }
1
追加された
Type type = typeof(VcRead);
foreach (var fiedInfo in type.GetFields())
{
   //your field

    foreach (var attribute in fiedInfo.GetCustomAttributes(true))
    {
       //attributes
    }                   
}

XmlElementAttribute から要素名を取得するには( XmlAttributeAttribute の場合と同じ)

if (attribute is XmlElementAttribute)
{
    var elementName = ((XmlElementAttribute)attribute).ElementName;
}

また、クラスにはプロパティの代わりにパブリックフィールドがあることに注意してください。

1
追加された