列出给定类的[XmlAttribute]的所有属性

时间:2016-04-20 09:20:31

标签: c# .net-4.0

例如,我有一个简单的类

class SomeCfg
{
    [XmlAttribute("ArchivePath")]
    public string ArchivePath { get; set; }
}

可以看出,给定类具有Xml 属性的一个属性。但是当程序执行到那个代码时

 var t = typeof (SomeCfg);
 var props = t.GetProperties().Where(
    prop => Attribute.IsDefined(prop, typeof(XmlAttribute)));

运行时抛出异常

System.ArgumentException: Type passed in must be derived from System.Attribute or System.Attribute itself.

当然,当我看到类型层次结构时,我意识到它是真的(我不会理解为什么这不会从该类继承)。

我的问题是如何列出这些属性(创建一个继承自XmlAttribute的类,在这种情况下System.Attribute不是一个选项)。

根据问号标签.Net版本为4.0。

2 个答案:

答案 0 :(得分:3)

您是否可以使用System.Xml.XmlAttribute代替System.Xml.Serialization.XmlAttributeAttribute

System.Xml.XmlAttribute用于表示xml文档中的属性。 System.Xml.Serialization.XmlAttributeAttribute指定XmlSerializer必须将类成员序列化为XML属性。

答案 1 :(得分:1)

您可以从以下代码中获取包含 XMLAttribute 的属性。

var props = t.GetProperties()
             .Where(prop =>
                 prop.GetCustomAttributes(typeof(XmlAttributeAttribute), false).Any(PropType => PropType.GetType() == typeof(XmlElementAttribute) ||
                                                         PropType.GetType() == typeof(XmlAttributeAttribute)));

如果您不想使用完整的 LINQ ,那么这篇文章对您也有帮助。

Serialize all properties in a class as attributes instead of elements