我将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
}
有没有办法检查对象A1
,A2
等是否有null
且对象内的任何属性是空还是空?如果这是真的,则反序列化失败。
答案 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()将在元素满足条件时立即返回