列表中的 ObjectValidator<MyType>

ObjectValidator on a List<MyType>

我正在使用企业库验证块在一套 WCF 服务中向我的入站数据对象添加验证。

我已将 [ObjectValidator] 属性添加到我的消息合同中,如下所示:

[MessageContract]
public class MyRequest
{
    public MyRequest()
    {
        Header = new MyHeader();
        Data = new List<MyType>();
    }

    [ObjectValidator]
    [MessageHeader]
    public MyHeader Header { get; set; }

    [ObjectValidator]
    [MessageBodyMember]
    public List<MyType> Data { get; set; }
}

我的正文 [DataContract] 是这样给出的:

[DataContract]
public class MyType
{
    [Required, DataMember(IsRequired = true)]
    [RegularExpressionAttribute(RegexValidation.Name)]
    public string Name { get; set; }

    [Required, DataMember(IsRequired = true)]
    [RegularExpressionAttribute(RegexValidation.Password)]
    public string Password { get; set; }    
} 

我注意到,如果我的 MessageContract 设置为 List<MyType>,则不会触发验证。如果我删除 List<> 并使用直线 MyType,那么它会触发。

很明显,企业库代码并没有在列表下方,而是在 List 对象本身中寻找验证项。有谁知道如何解决这个问题?

真的很简单的答案。在列表中使用 ObjectValidator 时,您需要使用 ObjectCollectionValidator 代替。