我试图在类的属性上找到DataMember属性。如果属性是在类中直接定义的属性上,我可以找到该属性。但是,如果属性在基类中定义并被重写,则找不到该属性。我找到了几个链接,说明你必须使用System.Attribute来获取这些信息。以下是Microsoft的直接引用。
当GetCustomAttributes的inherit参数为true时,在PropertyInfo或EventInfo上调用ICustomAttributeProvider.GetCustomAttributes不会遍历类型层次结构。使用System.Attribute继承自定义属性。
这似乎在使用完整框架时完全解决了问题。这似乎解决了Silverlight中仅“非系统”属性的问题(在Silverlight 3.0,4.0,5.0上测试)。下面的示例代码显示返回另一个自定义属性时不返回DataMemberAttribute。这是一个错误还是我错过了什么?
public class CustomAttribute : Attribute
{
}
public class Animal
{
[DataMember(), CustomAttribute()]
public virtual decimal Weight { get; set; }
}
public class Dog : Animal
{
public override decimal Weight { get; set; }
}
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
var animalAttributes = Attribute.GetCustomAttributes(typeof(Animal).GetProperties()[0], true);
var dogAttributes = Attribute.GetCustomAttributes(typeof(Dog).GetProperties()[0], true);
//animalAttributes contains 2 entries (DataMember, CustomAttribute)
//dogAttributes contains only 1 entry (CustomAttribute)
}
}
答案 0 :(得分:0)
我认为您必须在CustomAttribute中设置AttributeUsage以接受继承:http://msdn.microsoft.com/en-us/library/2ab31zeh.aspx
将AttributeUsage中的Inherited设置为true。
EDITED
DataMemberAttribute不允许继承。 http://msdn.microsoft.com/pt-br/library/system.runtime.serialization.datamemberattribute.aspx