我创建了一个自定义属性&在我班级的属性(不是字段)中使用它。
当我调用FormatterServices.GetSerializableMembers时,它确实给了我所有的属性
但是当我尝试使用MemberInfo.GetCustomAttributes读取属性时,它并没有给我任何价值。
当我尝试使用object.GetType()。GetProperties()。GetCustomAttributes,它完美地工作时,实现相同的效果。
知道为什么它没有在MemberInfo中提供信息吗?
[AttributeUsage(AttributeTargets.Property)]
public class MyAttribute : Attribute { }
//DOES NOT WORK
MemberInfo[] members = FormatterServices.GetSerializableMembers(recordObject.GetType());
object[] attributes = members[0].GetCustomAttributes(typeof(MyAttribute), false)
//WORKS
PropertyInfo[] properties = recordObject.GetType().GetProperties();
object[] attributes = properties[0].GetCustomAttributes(typeof(MyAttribute), false);
答案 0 :(得分:2)
FormatterServices.GetSerializableMembers
不返回任何属性,而是返回可序列化类的字段。
例如,以下示例类:
[Serializable]
public class TestClass
{
private int _test;
[MyAttribute]
public int Test
{
get { return _test; }
set { _test = value; }
}
}
FormatterServices.GetSerializableMembers
使用MemberInfo
_test
字段,但GetType()。GetProperties()返回属性MemberInfo
。
因为字段本身没有附加任何属性,因此GetCustomAttributes
不会返回任何内容。
答案 1 :(得分:1)
最有可能的是,第一个成员返回
FormatterServices.GetSerializableMembers(recordObject.GetType());
实际上并不是您所期望的财产。