从PropertyInfo获取MetaData类型

时间:2015-06-20 14:54:17

标签: c# reflection properties metadatatype

我的代码如下:

foreach (var PI in ObjType.GetProperties())
{
    var metaData = ModelMetadataProviders.Current.GetMetadataForType(null, PI.GetType());
    string DispName = metaData.DisplayName
}

ObjType是EF6架构第一个实体的类型,DisplayName被添加为Metadata类。上述错误可能是因为PI.GetType()返回PropertyInfo的类型。但我真的无法弄清楚如何获得房产本身。

我使用以下方式查看各种示例:

ModelMetadata.FromLambdaExpression(expression, helper.ViewData);

但是,就我而言,我没有使用任何Lambda Expression。我只需要构建属性列表'DisplayName并传递它。

2 个答案:

答案 0 :(得分:0)

  

但我真的无法弄清楚如何获得房产。

您想要PropertyInfo.PropertyType,因此请将PI.GetType()更改为PI.PropertyType

答案 1 :(得分:0)

我不知道这是否会对你有所帮助,但这就是我从它附加的对象中获取MetaDataClassType的方法。

具有MetadataType的示例类:

[MetadataType(typeof(TheMetaDataYouWantTheTypeFrom))]
public class ObjectYouWantMetaDataTypeFrom
{
    public string Username { get; set; }
    public string Name { get; set; }
}

public class TheMetaDataYouWantTheTypeFrom
{
    [Required(ErrorMessage = "You must enter a username.")]
    public object Username { get; set; }

    [Required(ErrorMessage = "You must enter a name.")]
    public object Name { get; set; }
}

获取MetadataClassType的代码

Type ObjectType = ObjectYouWantMetaDataTypeFrom.GetType();
object ObjectMetaData = ObjectType.GetCustomAttributes(typeof(MetadataTypeAttribute), true).FirstOrDefault();

MetadataTypeAttribute MetaData = ObjectMetaData as MetadataTypeAttribute;
if (MetaData == null)
{ throw new NullReferenceException(); }

Type metadataClassType = MetaData.MetadataClassType;