2014-10-03 5 views
1

swagger-spec 저장소는 유효한 Swagger 2.0 API 정의를 설명하는 JSON-schema을 제공합니다. 주어진 API 정의 파일이 유효한지 유효성을 검사하기 전에이 스키마를 사용하여 유효성을 검사하고 싶습니다. 나는 Json.NET을 사용하여 스키마를로드하려면 다음 코드를 사용하고 있습니다 :공식 Swagger API 스키마를 사용하여 Swagger API 선언 유효성 검사

JsonSchema swaggerApiSchema; 
using (var textReader = new JsonTextReader(new StreamReader(@"C:\path\to\schema.json"))) 
{ 
    swaggerApiSchema = JsonSchema.Read(textReader); 
} 

이것은보고 ArgumentException이 발생합니다 "부울로 배열을 변환 할 수 없습니다를.".

스키마 파일에 문제가 있습니까? Json.NET의 버그입니까? 아니면 잘못된 것입니까?

답변

2

JSON.NET은 문서별로 JSON 스키마 초안 3을 구현합니다. More here. 그러나 게시 한 Swagger 스키마는 JSON 스키마 초안 4에 따라 작성됩니다. JSON 스키마의 초안 3과 초안 4의 차이점 중 하나는 필수 속성입니다. JSON 스키마 초안 3에서는 속성의 하위 스키마 속성이었습니다. JSON에서 스키마 Draft 4는 동일한 역할을하는 첫 번째 레벨 키워드이며 문자열 배열을 인수로가집니다. JSON 스키마 초안의

샘플 3 :

{ 
    "properties": { 
     "Id": { 
      "required": true, 
      "type": "integer" 
     }, 
     "FirstName": { 
      "required": true, 
      "type": "string", 
     }, 
     "LastName": { 
      "required": true, 
      "type": "string 
     } 
    } 
} 

샘플 JSON의 스키마 초안 4 :

{ 
    "properties": { 
     "Id": { 
      "type": "integer" 
     }, 
     "FirstName": { 
      "type": "string" 
     }, 
     "LastName": { 
      "type": "string" 
     } 
    }, 
    "required": [ "Id", "FirstName", "LastName" ] 
} 

공지 사항이 어떻게 필요한 속성이 스키마의 차이가 정의되어 있습니다 . 그래서 "배열을 부울로 변환 할 수 없습니다."라는 오류가 발생합니다.

"required": [ "swagger", "info", "paths" ] 

내가 JSON 스키마 초안 4.

+0

감사를 구현 파서 검증하기 위해 제안 :

그리고 여기에 그 오류를 일으키는의 자신감 JSON 스키마에 필요한 속성의 첫 등장입니다 당신의 중대한 응답을 위해! 유효성 검사에 사용할 수있는 파서에 대한 제안이 있으십니까? – bgh

+0

현재 Newtonsoft Json 라이브러리 포크로 테스트 중입니다. https://github.com/JamesNK/Newtonsoft.Json/pull/328. Merge 충돌을 해결하여 스키마 v4를 메인 브랜치에 통합하기 위해 JameNK에서 계속 기다리고 있습니다. – njappboy

관련 문제