例如,我有一个简单的类
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。
答案 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