检查任何属性是否为null

时间:2015-09-21 07:25:19

标签: c# xml

我将XML反序列化为类模型,我想检查是否有任何未正确反序列化的XML节点。

我的班级看起来像这样:

class A
{
    public A1 pop1;
    public A2 prop2;

    // like so n number of classes
}
class  A1
{
    public string Item1{get;set;}
    public string Item2{get;set;}
    public string Item3{get;set;}

    // like so n number of classes
}

class A2
{
    public string Item1{get;set;}
    public string Item2{get;set;}
    public string Item3{get;set;}

    // like so n number of classes
}

有没有办法检查对象A1A2等是否有null且对象内的任何属性是空还是空?如果这是真的,则反序列化失败。

2 个答案:

答案 0 :(得分:4)

您可以使用反射来遍历类及其值。

在这种情况下,我要做的是在接口Validate中创建一个名为IValidateable的自定义方法。让每个类实现该接口并编写一个方法来进行内部验证。这样可以更容易地偏离现在的“所有属性不能为空”规则。

答案 1 :(得分:1)

您可以使用something like this

public bool HasAllEmptyProperties()
{
    var type = GetType();
    var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
    var hasProperty = properties.Select(x => x.GetValue(this, null))
                                .Any(y => y != null && !String.IsNullOrWhiteSpace(y.ToString()));
    return !hasProperty;
}

我也可以使用All()方法和正比较而不是Any()。但这是低效的,因为必须根据条件检查所有元素,而Any()将在元素满足条件时立即返回