我正在使用Validator.TryValidateObject()
来验证使用数据注释的对象。当对象无效时,代码执行正常。但是,如果它有效,则会产生stackoverflow错误。
这是我的方法:
public virtual IEnumerable<ValidationResult> Validate(ValidationContext vc)
{
vc = new ValidationContext(this, null, null);
List<ValidationResult> a = new List<ValidationResult>();
Validator.TryValidateObject(this, vc, a,true);
foreach (var item in a)
yield return item;
if (Name == "Arbitary")
yield return new ValidationResult("Bad Name.", new[] { "Name" });
}
TryValidateObject
似乎也在内部调用我的方法Validate
。
我使用此方法的目标是验证我的对象的所有DataAnnotations,然后在之后添加一些复杂的验证逻辑 - 所以我假设TryValidateObject
将检查数据注释,然后我可以进行自己的验证逻辑。
就目前而言,如果数据无效,我的方法会起作用 - 它将报告从DataAnnotations生成的ValidationResults,如果名称是“Arbitary”,还会添加ValidationResult,但如果数据有效,我会得到此stackoverflow。
有什么想法吗?如何以不会导致调用我自己的Validate
方法的方式验证对象的数据注释?或者,如何解决此堆栈溢出?
请注意,我的类实现了IValidatableObject
接口。
答案 0 :(得分:2)
根据此SO问题,您可以实现自己的数据注释属性来执行自定义验证,而不是从Validate继承吗?