从PropertyInfo获取DisplayAttribute属性

时间:2011-09-07 14:30:45

标签: c# .net reflection data-annotations propertyinfo

class SomeModel
{
    [Display(Name = "Quantity Required")]
    public int Qty { get; set; }

    [Display(Name = "Cost per Item")]
    public int Cost { get; set; }
}

我正在尝试将模型映射到{ PropertyName, DisplayName }对的列表中,但我已经卡住了。

var properties 
    = typeof(SomeModel)
        .GetProperties()
        .Select(p => new 
            {
                p.Name,
                p.GetCustomAttributes(typeof(DisplayAttribute),
                              false).Single().ToString()
            }
        );

上面没有编译,我不确定这是正确的方法,但希望你能看到意图。有什么指针吗?感谢

1 个答案:

答案 0 :(得分:27)

您需要为匿名类型定义不同的属性名称。

var properties = typeof(SomeModel).GetProperties()
    .Where(p => p.IsDefined(typeof(DisplayAttribute), false))
    .Select(p => new
        {
            PropertyName = p.Name, p.GetCustomAttributes(typeof(DisplayAttribute),
                false).Cast<DisplayAttribute>().Single().Name
        });