DataType属性通过Reflection进行装饰

时间:2012-09-18 15:51:16

标签: c# reflection

使用此方案

public class CustomerMetaData
{


    [DataType(DataType.EmailAddress)]       
    public String EmailAddress {get;set;}

    [DataType(DataType.Url)]       
    public String UrlUser {get;set;}

}

我需要通过反射此类的所有属性的DataType,但广泛的网络搜索,我找不到围绕此类DataAttribute的任何解决方案。

我解释了一下,我不需要知道属性Like,String,Boolean ....的数据类型。我需要[DataType(DataType .....)]属性的一部分。

提前致谢。

有些想法?

2 个答案:

答案 0 :(得分:5)

您需要GetCustomAttributes方法。

这是来自记忆,但它会是这样的:

PropertyInfo[] props = typeof(CustomerMetaData).GetProperties();
foreach(PropertyInfo p in props)
{
    object[] attribs = p.GetCustomAttributes(false);
    // do something with the attributes
}

查找GetProperties和GetCustomAttributes方法以确保参数:如果您的任何属性是非公开的,则必须指定一些其他信息以获取它们的信息。

答案 1 :(得分:0)

在考虑了5年后......

PropertyInfo[] props = typeof(CustomerMetaData).GetProperties();
foreach(PropertyInfo p in props)
{
    IEnumerable<DataTypeAttibute> dataTypeAttrs = p.GetCustomAttributes<DataTypeAttribute>(false);
    foreach(var attr in dataTypeAttrs)
    {
        DataType dataType = attr.DataType;
        // do something with the datatype
    }
}