FluentValidation 可以处理嵌套集合吗?

Can FluentValidation work with nested collections?

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();
    }
}

此行导致 Whosebug 异常:

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

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

为了避免在你的 ctor 中递归,我会用

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

我试了一下,它似乎正确地检索了验证错误,但是......我让你看看这是否真的是你需要的。

已接受的答案不再真实。 SetCollectionValidator 方法是 deprecated

相反,您应该使用 RuleForEachSetValidator。正确的代码是:

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