Как проверить несколько схем с помощью Json.net? - PullRequest
0 голосов
/ 18 января 2019

У меня следующий сценарий входящих сообщений от разных устройств в блок обработки, который должен обрабатывать сообщения в зависимости от типа сообщения.

  1. Сообщения со следующим определением схемы для hobbies, скажем schema-hobbies

    JSchema hobbiesSchema = JSchema.Parse(@"{
                   'type': 'object',
                   'properties': {
                   'name': {'type':'string'},
                   'hobbies': {
                      'type': 'array',
                      'items': {'type':'string'}
                   }}}");
    
  2. Сообщения со следующим определением схемы для countries, скажем schema-countries

    JSchema countriesSchema = JSchema.Parse(@"{
                   'type': 'object',
                   'properties': {
                   'name': {'type':'string'},
                   'countries': {
                      'type': 'array',
                      'items': {'type':'string'}
                   }}}");
    
  3. Сообщения, которые не соответствуют ни одному из приведенных выше Schema определений

Теперь я могу проверить hobbies сообщения следующим образом

    JObject hobbies = JObject.Parse(@"{
    'name': 'James',
    'hobbies': ['.NET', 'Blogging', 'Reading', 'Xbox', 'LOLCATS']
    }");

    IList<string> errorMessages;
    bool valid = hobbies.IsValid(hobbiesSchema , out errorMessages);

    Console.WriteLine(valid);

Я смогу объединить обе схемы и проверить разные входящие сообщения . Как я могу это сделать?

Например:

Если сообщение Json,

    {
    'name': 'James',
    'hobbies': ['.NET', 'Blogging', 'Reading', 'Xbox', 'LOLCATS']
    }

Выход должен быть: True

Если сообщение Json,

    {
    'name': 'James',
    'countries': ['India', 'Australia']
    }

Выход должен быть: True

Если сообщение Json,

    {
    'Time': '03:45 AM',
    'heartbeats': ['30', '45']
    }

Выход должен быть: False

Примечание:

  1. Пример схемы, использованной в этом вопросе, только для справки. Реальная схема очень сложна.
...