物體類是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; }),這里是什么原因啊,請大神指教
uj5u.com熱心網友回復:
MetadataTypeAttribute并不會讓net clr自動加上元資料。根據微軟參考,它是(只是)用來擴展data-model(資料模型)類的。
一些特定的參考,比如MVC資料校驗,會查找MetadataTypeAttribute并使用它。
如果你要自己用代碼去反射,可以模仿MVC資料校驗等等的做法,自己找MetadataTypeAttribute標記,找MetadataTypeAttribute指向的目標類,并反射目標類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/96229.html
標籤:C#
