Member 14779968 Ответов: 1

Как проверить строку json и схему C#


Я использую библиотеку Newtonsoft JSchema для проверки схемы ответа json. но мой чек возвращается фальшивым. Я создал класс с объектами, присутствующими в ответе API json, а затем сгенерировал объект класса в схему с помощью библиотеки JSchemaGenerator. После этого я проанализировал с помощью JArray и использовал метод IsValid, чтобы проверить, является ли схема допустимой, но возвращает false. Мой ответ-это список, но я хочу сохранить объекты моего класса как есть и просто хочу проверить, является ли id длинным, имя строковым и тип длинным. Кроме того, сохраняя метод IsJsonValid как можно более общим.

Ответ приходит в виде массива объектов.. это их способ просто проверить тип данных свойств, если вы определяете его только в схеме класса, как это сделал я.

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

public class Schema
    {
        public long id { get; set; }
        public string name { get; set; }
        public long type { get; set; }

   }
//json respone from the API
[
   {
    "id": 1,
    "name": "name1",
    "type": 0
   },
  {
    "id" : 2
    "name" : "name2",
    "type" : 1
  }

]
//here is the method to check if JsonIsValid

 public static bool IsJsonValid<TSchema>(this string value)
        {
            bool res = true;
            var obj = JsonConvert.DeserializeObject<List<TSchema>>(value);
           
            JSchemaGenerator generator = new JSchemaGenerator();
            JSchema schema = generator.Generate(typeof(TSchema));
                              
            JArray actualJson = JArray.Parse(value);
            bool valid = actualJson.IsValid(schema);
          
            return valid;
        }


//usage:
string json  = "[{\"id\":1,\"name\":\"name1\",\"type\":0},{\"id\":2,\"name\":\"name2\",\"type\":1}]";
  bool isValid = json.IsJsonValid<Schema>();

1 Ответов

Рейтинг:
2

OriginalGriff

Если я запускаю ваш JSON через генератор классов (я использую Конвертировать JSON в классы C# онлайн - Json2CSharp Toolkit[^]) он действительно говорит, что он недействителен: и это так.
Ваш API возвращает плохой JSON - в частности, эту строку:

"id" : 2
требуется окончательная запятая. Добавьте это, и он начнет работать:
[
   {
    "id": 1,
    "name": "name1",
    "type": 0
   },
  {
    "id" : 2,
    "name" : "name2",
    "type" : 1
  }

]