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
            });
        }