Get DisplayAttribute attribute from PropertyInfo

fearofawhackplanet picture fearofawhackplanet · Sep 7, 2011 · Viewed 14.8k times · Source
class SomeModel
{
    [Display(Name = "Quantity Required")]
    public int Qty { get; set; }

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

I'm trying to map the model into a list of { PropertyName, DisplayName } pairs, but I've got stuck.

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

The above doesn't compile and I'm not sure it's the right approach anyway, but hopefully you can see the intent. Any pointers? Thanks

Answer

Kirill Polishchuk picture Kirill Polishchuk · Sep 7, 2011

In this case you need to define specific property names for anonymous type.

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