2017-04-14 53 views
0

我是JSON架構和Json.NET架構的新手。只是遵循示例編寫測試程序來進行模式驗證。我選擇了一個隨機模式和一個隨機JSON文件,但最後的IsValid()調用返回True。我錯過了什麼嗎?謝謝。爲隨機文檔傳遞的模式驗證?

static void SchemaTest3() 
    { 
     string schemaJson = @"{ 
      'description': 'A person', 
      'type': 'object', 
      'properties': { 
      'name': {'type':'string'}, 
      'hobbies': { 
       'type': 'array', 
       'items': {'type':'string'} 
      } 
      } 
     }"; 
     JSchema schema = JSchema.Parse(schemaJson); 

     IList<string> errorMessages; 
     JToken jToken = JToken.Parse(@"{ 
          '@Id': 1, 
          'Email': '[email protected]', 
          'Active': true, 
          'CreatedDate': '2013-01-20T00:00:00Z', 
          'Roles': [ 
          'User', 
          'Admin' 
          ], 
          'Team': { 
          '@Id': 2, 
          'Name': 'Software Developers', 
          'Description': 'Creators of fine software products and services.' 
          } 
         }"); 
     bool isValid = jToken.IsValid(schema, out errorMessages); 
     Console.Write(isValid); 
    } 

回答

1

您挑選的架構允許添加附加屬性,不使「要求」任何領域,其原因任何有效的JSON將通過您的架構。

如果添加「additionalProperties」:false,這會使您的模式更加嚴格。

您可以使用http://www.jsonschemavalidator.net/來播放您的架構並探索其他選項。

我發現http://json-schema.org/examples.html當用json模式開始時非常有用。

下面是你的模式更嚴格。

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "description": "A person", 
    "type": "object", 
    "properties": { 
     "name": { 
      "type": "string" 
     }, 
     "hobbies": { 
      "type": "array", 
      "items": { 
       "type": "string" 
      } 
     } 
    }, 
    "additionalProperties": false 
}