验证自定义验证属性中的列表

本文关键字:验证 列表 属性 自定义 | 更新日期: 2023-09-27 17:51:15

使用自定义验证属性,我正在尝试验证对象列表。类如下所示:MyClass。在自定义属性中,我可以将object value转换为对象列表,但如何访问对象中的属性IdName

我知道我可以将属性直接放在MyClass属性上,但在验证之前我需要检查几件事。首先,我需要检查列表中的项目数是否大于1。然后,如果计数大于1,我需要检查IdName是否都为空。

我的想法是,在一个属性中验证整个列表会更容易。但是,即使我确实将属性放置在MyClass属性上,我仍然需要访问列表中的值。

如果列表作为IsValidvalue参数传递,则所有列表项都在值内。如果我把属性放在MyClass属性上,我需要用另一种方式获取值。我已经能够用下面的代码获得单个值,但我无法获得值的列表。

一句话:我需要一种方法来访问object value参数或ValidationContext validationContext参数列表中的所有值。

获取单个值(而不是值列表(:

var property = validationContext.ObjectType.GetProperty("MyProperty");
var value = property.GetValue(validationContext.ObjectInstance, null);

自定义属性:

public sealed class ValidateNewSauList : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var myList = value as IList;
    } 
}

这是用户定义的类:

public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

验证自定义验证属性中的列表

业务逻辑有点不清楚,因此,基于一个限定的猜测,解决方案可能如下。假设您有一个_lst = List<MyClass>,那么您可以迭代列表并将验证规则(例如,称为方法ValidateID()ValidateName()(应用于这两个属性:

foreach (MyClass _mc in _lst)
{
   ValidateID (_mc.Id);
   ValidateName (_mc.Name);
}

希望这能有所帮助。致问候,