FluentValidation可以与嵌套集合一起工作吗?

本文关键字:一起 工作 集合 嵌套 FluentValidation | 更新日期: 2023-09-27 18:02:23

FluentValidation可以与分层集合一起工作吗?可以验证以下具有任意数量子节点的对象吗?

public class Node
{
    public string Id { get; set; }
    public List<Node> ChildNodes { get; set; }
}

用非常简单的术语来说,我希望下面的代码工作:

public class NodeValidator : AbstractValidator<Node>
{
    public NodeValidator()
    {
        RuleFor(x => x.ChildNodes).SetCollectionValidator(new NodeValidator());
        RuleFor(x => x.Id).NotEmpty();
    }
}

这一行导致StackOverflow异常:

RuleFor(x => x.ChildNodes).SetCollectionValidator(new NodeValidator());

如何验证深度嵌套对象的属性"Id" ?

FluentValidation可以与嵌套集合一起工作吗?

接受的答案不再是实际的。SetCollectionValidator方法已弃用

应该使用RuleForEachSetValidator。正确的代码是:

RuleForEach(x => x.ChildNodes).SetValidator(this);

为了避免在您的函数中递归,我将使用

更正您的验证器。
RuleFor(x => x.ChildNodes).SetCollectionValidator(this);

我给了它一个尝试,它似乎检索验证错误正确,但是…