当我不知道类型时,我可以获取属性的DataAnnotation显示名称吗?

时间:2016-01-08 16:40:35

标签: c# data-annotations

我将介绍ICollection中项目的属性,并且在编译时不一定知道ICollection中的项目类型。我可以获取属性名称,但想获取DataAnnotation显示名称(如果有)。

如何在运行时找到未知类型的DataAnnotations(如果有)中定义的显示名称?

到目前为止,我有这个:

foreach (var thisSection in Report.ReportSections)
{
    reportBody.Append(thisSection.ReportSectionName + Environment.NewLine);

    if (thisSection.ReportItems != null)
    {
        var itemType = thisSection.ReportItems.GetType().GetGenericArguments().Single();

        var first = true;
        foreach (var prop in itemType.GetProperties())
        {
            if (!first) reportBody.Append(",");

            // This gives me the property name like 'FirstName'
            reportBody.Append(prop.Name); 

            try
            {
                // I'd like to get the Display Name from 
                // [Display(Name = "First Name")]
                var displayName = prop.GetCustomAttributes();
            }
            catch (Exception e)
            {

            }

            first = false;
        }
        reportBody.Append(Environment.NewLine);
    }
}

ReportSection的定义如下:

public interface IReportSection
{
    string ReportSectionName { get; }

    ICollection ReportItems { get; }
}

ICollection可以包含这样的对象集合:

public class ProjectAffiliateViewModel
{
    public string Role { get; set; }

    [Display(Name = "First Name")]
    public string FirstName { get; set; }
}

对于Role属性,我们会获得Role,对于FirstName属性,我们会获得First Name

1 个答案:

答案 0 :(得分:4)

像这样:

DisplayAttribute attribute = prop.GetCustomAttributes(typeof(DisplayAttribute), false)
                                 .Cast<DisplayAttribute>()
                                 .SingleOrDefault();

string displayName = (attribute != null) ? attribute.Name : prop.Name;