using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
public static void Main(string[] args)
var user = new Stuent() { Name = "Hardik", CourseList = new List<Course>() {
new Course { CourseId = 1, CourseName = "English" },
new Course { CourseId = 2, CourseName = "Maths" },
new Course { CourseId = 3, CourseName = "" }
var user1 = new Course();
var context = new ValidationContext(user, null, null);
var results = new List<ValidationResult>();
Validator.TryValidateObject(user, context, results, true);
foreach (var item in results)
Console.WriteLine(item.ErrorMessage);
Console.WriteLine("Success");
public string Name { get; set; }
[Required, ValidateObject]
public List<Course> CourseList { get; set; }
public int CourseId { get; set; }
[Required(AllowEmptyStrings = false)]
public string CourseName { get; set; }
public class ValidateObjectAttribute : ValidationAttribute
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
var list = value as List<ConsoleApp1.Program.Course>;
foreach (var item in list)
var results = new List<ValidationResult>();
var context = new ValidationContext(item, null, null);
Validator.TryValidateObject(item, context, results, true);
var compositeResults = new CompositeValidationResult(String.Format("Validation for {0} failed!", validationContext.DisplayName));
results.ForEach(compositeResults.AddResult);
return ValidationResult.Success;
public class CompositeValidationResult : ValidationResult
private readonly List<ValidationResult> _results = new List<ValidationResult>();
public IEnumerable<ValidationResult> Results
public CompositeValidationResult(string errorMessage) : base(errorMessage) { }
public CompositeValidationResult(string errorMessage, IEnumerable<string> memberNames) : base(errorMessage, memberNames) { }
protected CompositeValidationResult(ValidationResult validationResult) : base(validationResult) { }
public void AddResult(ValidationResult validationResult)
_results.Add(validationResult);