StackOverflow with TryValidateObject 如果对象有效

本文关键字:对象 有效 如果 TryValidateObject with StackOverflow | 更新日期: 2023-09-27 18:30:49

我正在使用Validator.TryValidateObject()来验证使用数据注释的对象。当对象无效时,代码执行正常。但是,如果它有效,则会产生堆栈溢出错误。

这是我的方法:

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

我使用此方法的目标是验证对象的所有 DataAnnotation,然后添加一些复杂的验证逻辑 - 所以我假设TryValidateObject会检查数据注释,然后我可以放置自己的验证逻辑。

就目前而言,如果数据无效,我的方法就可以工作 - 它将报告从 DataAnnotations 生成的 ValidationResults,如果名称为"Arbitary",还会添加一个 ValidationResult,但如果数据有效,我会得到这个堆栈溢出。

有什么想法吗?如何以不会导致调用我自己的Validate方法的方式验证对象的数据注释?或者,如何解决此堆栈溢出?

请注意,我的类实现了 IValidatableObject 接口。

StackOverflow with TryValidateObject 如果对象有效

根据

这个 SO 问题,您能否实现自己的数据注释属性来执行自定义验证,而不是从验证继承?

如何创建自定义数据注释验证程序