public static ModelStateDictionary ValidateObject(object objectValue) { //0. here we could use reflection but we know for sure it will return modelState! var modelState = new ModelStateDictionary(); var objectProperties = objectValue.GetType().GetProperties(); //1st get the props foreach (var objectProperty in objectProperties) { //2.1. in each prop, we get only the validation attributes //2.2. we cast each OBJECT ATTRIBUTE to the attribute we NEED (vlidationattribute, because we`ll use the is valid method!) var validationAttributes = objectProperty .GetCustomAttributes(typeof(ValidationSisAttribute), true) .Cast <ValidationSisAttribute>() .ToList(); //от тук надолу, вече почваш да губиш връзката! //3. вземаш prop-a и му казваш да си покаже стойността с obj (забравяш, че винаги трябва да имаш инстанция, за да видиш, //1 Prop, каква му е стойността. (то няма логика другояче, ама както и да е. foreach (var validationAttribute in validationAttributes) { //4. тук , вместо да изписваме false/true, ще събраме информация за съобщения, когато са false само! if (validationAttribute.IsValid(objectProperty.GetValue(objectValue))) { continue; } //5.1. we make it false , becaues it contains at least one error! modelState.IsValid = false; modelState.AddMessage(objectProperty.Name, validationAttribute.ErrorMessage); //5.2. => all that is left is to add the validationAttributes in the inputModels! } } return(modelState); }