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
相反,您应该使用 RuleForEach
和 SetValidator
。正确的代码是:
RuleForEach(x => x.ChildNodes).SetValidator(this);
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
相反,您应该使用 RuleForEach
和 SetValidator
。正确的代码是:
RuleForEach(x => x.ChildNodes).SetValidator(this);