我尝试将自定义属性分配给来自动态代理的类
System.Data.Entity.DynamicProxies.Login_A2947F53...
示例类登录
public partial class Login
{
[CustomAttribute]
public virtual int Id
{
get;
set;
}
}
现在我尝试使用泛型和反射访问属性
public static void Process(TSource source)
{
foreach (PropertyInfo p in target.GetType().GetProperties(flags))
{
object[] attr = p.GetCustomAttributes(true); // <- empty
}
}
但没有属性。这是由于DynmaicProxy还是我在这里做错了什么?
当我使用没有像这样的动态代理的具体类时,我得到属性。
public class TestObject
{
[CustomAttribute]
public virtual string Name { get; set; }
[CustomAttribute]
public virtual string Street { get; set; }
public virtual int Age { get; set; }
public virtual string Something { get; set; }
}
答案 0 :(得分:1)
好的,仔细观察后这个很明显;
System.Data.Entity.DynamicProxies.Login_A2947F53...
是dynamicProxy类型,对任何属性一无所知。所以我必须使用类似的东西:
foreach (PropertyInfo p in typeof(Login).GetProperties(flags))
而不是dynamicProxy实例来获取类型。最后还有我的属性。
答案 1 :(得分:1)
使用 BaseType 。
public static void Process(TSource source)
{
foreach (PropertyInfo p in target.GetType().BaseType.GetProperties(flags))
{
object[] attr = p.GetCustomAttributes(true);
}
}