Как я могу сказать блоку проверки допустимости Аннотирований данных также проверять сложные дочерние свойства?

Я могу автоматически проверить сложные дочерние объекты при проверке родительского объекта и включать результаты в заполненное ICollection<ValidationResult>?

Если я выполняю следующий код:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace ConsoleApplication1
{
    public class Person
    {
        [Required]
        public string Name { get; set; }

        public Address Address { get; set; }
    }

    public class Address
    {
        [Required]
        public string Street { get; set; }

        [Required]
        public string City { get; set; }

        [Required]
        public string State { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person
            {
                Name = null,
                Address = new Address
                {
                    Street = "123 Any St",
                    City = "New York",
                    State = null
                }
            };

            var validationContext = new ValidationContext(person, null, null);
            var validationResults = new List<ValidationResult>();

            var isValid = Validator.TryValidateObject(person, validationContext, validationResults);

            Console.WriteLine(isValid);

            validationResults.ForEach(r => Console.WriteLine(r.ErrorMessage));

            Console.ReadKey(true);
        }
    }
}

Я получаю следующий вывод:

False
The Name field is required.

Но я ожидал что-то подобное:

False
The Name field is required.
The State field is required.


Я предложил щедрость для лучшего решения для проверки дочернего объекта, но не получил берущих, идеально

  • проверка дочерних объектов к произвольной глубине
  • обработка нескольких ошибок на объект
  • правильно определяя ошибки проверки на полях дочернего объекта.

Я все еще удивлен, что платформа не поддерживает это.

38
задан Rup 11 May 2011 в 12:02
поделиться