有没有办法让代码执行此操作:
MyObject中的Foreach属性; 检查属性是否具有DataMember Validator on is IsRequired = true;
[DataMember(Order = 2, IsRequired=true)]
public string AddressLine1 { get; set; }
[DataMember(Order = 3)]
public string AddressLine2 { get; set; }
如果是,请检查对象中是否包含notNull或空值;
总而言之,我创建了一个名为CheckForRequiredFields(object o)
的方法在这种情况下将“地址”对象传递给上面列出的属性。代码看到第一个属性具有RequiredField = true,因此它检查传递给它的Address对象是否具有AddressLine1的值
答案 0 :(得分:1)
是的,有。看看Reflection。您可以输入类型,在其上调用Type.GetProperties()
并为每个媒体资源检索PropertyInfo
。
从PropertyInfo
您可以获取其属性(使用GetCustomAttributes
方法),并查找DataMember
属性。如果找到,请检查其IsRequired
。
答案 1 :(得分:1)
类似的东西(来自记忆所以无法保证正确性):
foreach(var propInfo in o.GetType().GetProperties())
{
var dmAttr = propInfo.GetCustomAttributes(typeof(DataMemberAttribute), false).FirstOrDefault() as DataMemberAttribute;
if (dmAttr == null)
continue;
object propValue = propInfo.GetValue(o, null);
if (dmAttr.IsRequired && propValue == null)
// It is required but does not have a value... do something about it here
}