创建一个迭代对象属性的方法

时间:2012-03-05 19:20:13

标签: c# wcf

有没有办法让代码执行此操作:

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的值

2 个答案:

答案 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
}