我要做的是将现有的attributes
从一个property
复制到另一个foreach (var prop in typeof(Example).GetProperties())
{
FieldBuilder field = typeBuilder.DefineField("_" + prop.Name, prop.PropertyType, FieldAttributes.Private);
PropertyBuilder propertyBuilder =
typeBuilder.DefineProperty(prop.Name,
PropertyAttributes.HasDefault,
prop.PropertyType,
null);
object[] attributes = prop.GetCustomAttributes(true);
foreach (var attr in attributes)
{
//Here I need to get value of constructor parameter passed in declaration of Example class
ConstructorInfo attributeConstructorInfo = attr.GetType().GetConstructor(new Type[]{});
CustomAttributeBuilder customAttributeBuilder = new CustomAttributeBuilder(attributeConstructorInfo,new Type[]{});
propertyBuilder.SetCustomAttribute(customAttributeBuilder);
}
}
。
这是我现在的代码:
attributes
它正常工作但仅适用于具有无参数constructor
的{{1}}。
对于例如“DataTypeAttribute”只有constructors
parameter
。
现在我想知道是否有办法获得attribute
constructor
假设我有这个模型:
public class Example
{
public virtual int Id { get; set; }
[Required]
[MaxLength(50)]
[DataType(DataType.Text)]
public virtual string Name { get; set; }
[MaxLength(500)]
public virtual string Desc { get; set; }
public virtual string StartDt { get; set; }
public Example()
{
}
}
现在我只能copy
RequiredAttribute
,因为它有无参数constructor
。我无法copy
DataTypeAttribute
。所以我想从我的示例模型中获取value
DataType.Text
。
任何人都有一些想法如何让它发挥作用?
答案 0 :(得分:4)
使用GetCustomAttributesData()
而不是返回构造属性的GetCustomAttributes()
。它返回CustomAttributeData
的集合,其中包含您需要的内容:用于创建属性的构造函数,其参数以及有关属性的命名参数的信息。