我遇到了这个问题,在SO上找不到任何一般解决方案,所以我在这里发帖。
如何从具有元数据类设置属性的类中获取属性的值?
我有一个自定义属性,我想用它来表示我感兴趣的属性。但是,该属性必须通过元数据类应用,因为我正在使用带有Entity Framework的类。
我想获取由具有我的属性集的元数据指定的类型的值,但此代码未找到元数据定义的属性。
public class PropertyAttribute : Attribute { }
[MetadataType(typeof(CarMetaData))]
public class Car
{
[Property]
public int FieldA { get; set; }
public int MetaFieldA { get; set; }
internal sealed class CarMetaData
{
[Property]
public int MetaFieldA { get; set; }
}
}
var car = new Car() { FieldA = 1234, MetaFieldA = 4321 };
var source = car;
var sourceType = source.GetType();
var props = sourceType.GetProperties().Where(p => Attribute.IsDefined(p, typeof(PropertyAttribute)));
foreach (PropertyInfo prop in props)
{
var sourceProp = sourceType.GetProperty(prop.Name);
var val = sourceProp.GetValue(source, null);
//do something with val
}
答案 0 :(得分:0)
这可以通过查找元数据类类型,并找到已定义属性的 类型的属性来完成。
var metaAttr = (MetadataTypeAttribute)sourceType.GetCustomAttribute(typeof(MetadataTypeAttribute), true);
var metaClassType = metaAttr.MetadataClassType;
var props = metaClassType.GetProperties().Where(p => Attribute.IsDefined(p, typeof(PropertyAttribute)));
foreach (PropertyInfo prop in props)
{
var sourceProp = sourceType.GetProperty(prop.Name);
var val = sourceProp.GetValue(source, null);
//do something with val
}