Проверка DataAnnotations из класса

Я использую DataAnnotations в проекте, который является чистым приложением C#, как лучше всего проверить мои модели/документы на соответствие атрибутам DataAnnotations?


person Coppermill    schedule 29.04.2010    source источник


Ответы (2)


Теперь это встроено в С# 4

var result = new List<ValidationResult>();
bool valid = Validator.TryValidateObject(Vehicle, new ValidationContext(Vehicle, null, null), result);

Это также даст вам подробную информацию о проверке.

person Nate Zaugg    schedule 22.08.2011

Не от меня, а от моего друга Стива Сандерсона:

internal static class DataAnnotationsValidationRunner
{
    public static IEnumerable<ErrorInfo> GetErrors(object instance)
    {
        return from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>()
               from attribute in prop.Attributes.OfType<ValidationAttribute>()
               where !attribute.IsValid(prop.GetValue(instance))
               select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty), instance);
    }
}

Вам может потребоваться улучшить это, например, если вы хотите, чтобы [DataType(DataType.EmailAddress)] действительно проверял адреса электронной почты, или если вы хотите поддерживать атрибут [MetadataType].

person Coppermill    schedule 07.05.2010
comment
Это сработало для меня для всех атрибутов, кроме DataType. например [DataType(DataType.EmailAddress)] public object DataTypeTest { get; set; } есть идеи, почему? - person Rob McCabe; 15.01.2020