Member 14779968 Ответов: 1

Как создать универсальный валидатор свойств для веб-API?


В настоящее время я тестирую API и хочу создать универсальный валидатор, который будет проверять свойства json и его значения для модели.

Например у меня есть следующий Json ответ от сервера
{
   "id" : 1,
   "name" : "John",
   "age" : 30
 
}

//I created a Model DTO for this to compare it to json I get back.
public class UserDTO
{
    public int id { get; set; }
    public string name{ get; set; }
    public int age { get; set; }

     public static UserDTO Userinfo()
     {
            return new UserDTO()
           {
               id = 1,
               name = "John",
               age = 30
           };

     }

}


Что я уже пробовал:

//Итак, я пытаюсь создать класс, который будет принимать любой класс типа модели, а затем иметь метод validate, где он принимает IRestresponse(используя Restsharp) и преобразует в объекты, получает свойства и значения. Затем сравните это с классом модели.


public class PropertiesValidator<TModel> where TModel : class
  {
      public void Validate(IRestResponse response, TModel tmodelObj)
      {
          var content = response.Content;
          object acutalObjects = JsonConvert.DeserializeObject(content);

          //Getting Type of Generic class Model properties
          PropertyInfo[] properties = tmodelObj.GetType().GetProperties();
          foreach (PropertyInfo modelProperty in properties)
          {
              PropertyInfo currentExpectedProperty = tmodelObj.GetType().GetProperty(modelProperty.Name);
              string exceptionMessage =
                  string.Format("The property {0} of class {1} was not as expected.", modelProperty.Name, modelProperty.DeclaringType.Name);

              Assert.AreEqual(currentExpectedProperty.GetValue(tmodelObj, null), modelProperty.GetValue(acutalObjects, null), exceptionMessage);
          }
      }

1 Ответов

Рейтинг:
2

MadMyche

Это недопустимый JSON

{
   id = 1,
   name = "John",
   age = 30
}
Поскольку все имена (id, имя, возраст) должны быть заключены в кавычки, поскольку они являются строками.
RFC 4627
2.2. Объекты

Структура объекта представлена в виде пары фигурных скобок
окружающий ноль или более пар имя/значение (или членов). Имя-это ...
строка. После каждого имени следует одно двоеточие, разделяющее имя
от значения. Одна запятая отделяет значение от следующего
имя. Имена внутри объекта должны быть уникальными.

объект = начать-объект [ член *( стоимость-сепаратор член ) ]
конечный объект

элемент = имя строки-значение разделителя

2.5. Струны

Представление строк аналогично соглашениям, используемым в языке Си
семейство языков программирования. Строка начинается и заканчивается словами
кавычки. Все символы Юникода могут быть помещены в
кавычки, за исключением символов, которые должны быть экранированы:
кавычки, обратный Солидус и управляющие символы (U+0000
через U+001F).
Ссылка:
RFC 4627: тип носителя application/json для нотации объектов JavaScript (JSON)[^]


Member 14779968

Да, это была моя ошибка. Я починил Json.