public ViewModelValidationResult <T> ViewModelValidation <T>(JObject jsonData, string viewModelName, AbstractValidator <T> validator, string[] properties = null) where T : class { var parser = GetViewModel <T>(viewModelName, jsonData); if (parser.IsError) { _responseFormatter.SetError(parser.ErrorMessage); return(new ViewModelValidationResult <T>() { Result = new BadRequestObjectResult(_responseFormatter.GetResponse()) }); } ValidationResult result = new ValidationResult(); if (properties != null && properties.Count() > 0) { var context = new ValidationContext <T>(parser.Result, new PropertyChain(), new MemberNameValidatorSelector(properties)); result = validator.Validate(context); } else { result = validator.Validate(parser.Result); } if (!result.IsValid) { _responseFormatter.SetError(result.Errors.ToList()); return(new ViewModelValidationResult <T>() { Result = new BadRequestObjectResult(_responseFormatter.GetResponse()) }); } return(new ViewModelValidationResult <T>() { ViewModel = parser.Result }); }