这两个类
[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;
答案 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));
}