Как получить DisplayAttribute свойства Reflection?

У меня есть метод Helper, подобный этому, чтобы получить мне PropertyName (попытка избежать магических строк)

public static string GetPropertyName<T>(Expression<Func<T>> expression)
        {
            var body = (MemberExpression) expression.Body;
            return body.Member.Name;
        }

Однако иногда мои Имена свойств также не называются хорошо. Поэтому я бы предпочел использовать DisplayAttribute.

[Display(Name = "Last Name")]
public string Lastname {get; set;}

Помните, что я использую Silverlight 4.0. Я не смог найти обычное атрибут DisplayAttributeName пространства имен для этого.

Как я могу изменить свой метод, чтобы вместо этого читать атрибут (если он доступен)?

Большое спасибо,

Ответ 1

Это должно работать:

public static string GetPropertyName<T>(Expression<Func<T>> expression)
{
    MemberExpression propertyExpression = (MemberExpression)expression.Body;
    MemberInfo propertyMember = propertyExpression.Member;

    Object[] displayAttributes = propertyMember.GetCustomAttributes(typeof(DisplayAttribute), true);
    if(displayAttributes != null && displayAttributes.Length == 1)
        return ((DisplayAttribute)displayAttributes[0]).Name;

    return propertyMember.Name;
}