XmlElement反映

时间:2013-01-29 09:29:30

标签: c# .net

这两个类

[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标记。 获取字段的名称和值很容易。 但是,如何获取XmlElement的值,例如

中的“amount”
[XmlElement("amount")]
public int Count;

2 个答案:

答案 0 :(得分: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 :(得分:1)

而不是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));
 }