Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static bool TryValidateObjectRecursively(object instance, ICollection<ValidationResult> results, bool validateAllProperties)
- {
- if (instance is null)
- throw new ArgumentNullException(nameof(instance));
- var isValid = true;
- var tempResults = new List<ValidationResult>();
- var context = new ValidationContext(instance);
- isValid &= Validator.TryValidateObject(instance, context, tempResults, validateAllProperties);
- foreach (var item in tempResults)
- {
- results.Add(new ValidationResult(item.ErrorMessage, item.MemberNames));
- }
- foreach (var prop in instance.GetType().GetProperties())
- {
- if (prop.GetSetMethod() == null)
- continue;
- if (!prop.PropertyType.IsClass || prop.PropertyType == typeof(string))
- continue;
- var value = prop.GetValue(instance);
- switch (value)
- {
- case null:
- continue;
- case IEnumerable<object> list:
- {
- isValid = list.Aggregate(isValid, (current, item) => current & TryValidateObjectRecursively(item, results, validateAllProperties));
- break;
- }
- default:
- {
- isValid &= TryValidateObjectRecursively(value, results, validateAllProperties);
- break;
- }
- }
- }
- return isValid;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement