反射无法获取Meta中的特性

CrazyCode1981 2019-11-20 09:36:46
实体类是T4模板生成的,有些特性需要添加,无法在partial class 上添加,查了下说是只能在元数据Meta中添加(大神如果有别的方法请多指教)

//T4模板生成的实体类
public partial class Personnel_XB
{
[Display(Name = "人名")]
public String Name { get; set; }
}

//手动写的部分类
[MetadataType(typeof(Personnel_XBAttr))]
public partial class Personnel_XB
{
//测试用的特性,自己手动写的反射的时候可以获取到
[Display(Name = "人名")]
public int Test { get; set; }
}

//这个是元数据类, public String Name { get; set; } 是T4模板根据数据库生成的一个属性
public class Personnel_XBAttr
{
//这里获取不到
[Display(Name = "人名")]
public String Name { get; set; }
}


反射代码:

Type objType = obj.GetType();//获得该类的Type
foreach (PropertyInfo item in objType.GetProperties())
{
IList<CustomAttributeData> lstAttr = item.GetCustomAttributesData();
var temp = item.GetCustomAttribute<DisplayNameAttribute>();
var attributes = item.GetCustomAttributes(typeof(DisplayNameAttribute), false);
}

上面的反射代码无法获取到 Personnel_XBAttr元数据类中的 public String Name { get; set; } 这个属性的特性,但是可以获取到部分类中我手动添加的属性的特性( public int Test { get; set; }),这里是什么原因啊,请大神指教

...全文
82 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
github_36000833 2019-11-20
  • 打赏
  • 举报
回复
MetadataTypeAttribute并不会让net clr自动加上元数据。

根据微软参考,它是(只是)用来扩展data-model(数据模型)类的。
一些特定的引用,比如MVC数据校验,会查找MetadataTypeAttribute并使用它。

如果你要自己用代码去反射,可以模仿MVC数据校验等等的做法,自己找MetadataTypeAttribute标记,找MetadataTypeAttribute指向的目标类,并反射目标类。

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧