4

假设这个场景

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.....)] 属性的一部分。

提前致谢。

一些想法?

4

2 回答 2

5

您需要 GetCustomAttributes 方法。

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

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

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

于 2012-09-18T15:55:27.213 回答
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
    }
}
于 2017-04-11T13:44:17.047 回答