Вот ошибка, которую я получаю, когда JSON.net пытается прочитать мою схему JSON ( return JsonSchema.Read(new JsonTextReader(reader));
):
2014-07-15 15:33:42.7011 [Fatal] Newtonsoft.Json.JsonException: Could not resolve schema reference 'data-result.json'.
at Newtonsoft.Json.Schema.JsonSchemaBuilder.ResolveReferences(JsonSchema schema) in c:\Development\Releases\Json\Work
ing\Newtonsoft.Json\Src\Newtonsoft.Json\Schema\JsonSchemaBuilder.cs:line 139
at Newtonsoft.Json.Schema.JsonSchemaBuilder.ResolveReferences(JsonSchema schema) in c:\Development\Releases\Json\Work
ing\Newtonsoft.Json\Src\Newtonsoft.Json\Schema\JsonSchemaBuilder.cs:line 179
at Newtonsoft.Json.Schema.JsonSchemaBuilder.Read(JsonReader reader) in c:\Development\Releases\Json\Working\Newtonsof
t.Json\Src\Newtonsoft.Json\Schema\JsonSchemaBuilder.cs:line 85
at Newtonsoft.Json.Schema.JsonSchema.Read(JsonReader reader, JsonSchemaResolver resolver) in c:\Development\Releases\
Json\Working\Newtonsoft.Json\Src\Newtonsoft.Json\Schema\JsonSchema.cs:line 280
at Newtonsoft.Json.Schema.JsonSchema.Read(JsonReader reader) in c:\Development\Releases\Json\Working\Newtonsoft.Json\
Src\Newtonsoft.Json\Schema\JsonSchema.cs:line 266
at ThinkBinary.SchemaToPoco.Core.JsonSchemaToCodeUnit.LoadSchema(String file) in c:\Users\SLiu\Projects\json-schema-t
o-poco\Source\ThinkBinary.SchemaToPoco.Core\JsonSchemaToCodeUnit.cs:line 70
at ThinkBinary.SchemaToPoco.Core.JsonSchemaToCodeUnit..ctor(String schemaDocument, String requestedNamespace) in c:\U
sers\SLiu\Projects\json-schema-to-poco\Source\ThinkBinary.SchemaToPoco.Core\JsonSchemaToCodeUnit.cs:line 19
at ThinkBinary.SchemaToPoco.Console.Program.Main(String[] args) in c:\Users\SLiu\Projects\json-schema-to-poco\Source\
ThinkBinary.SchemaToPoco.Console\Program.cs:line 38
Моя схема JSON:
{
"$schema": "http://json-schema.org/draft-03/schema#",
"title": "DataSet",
"description": "A result set and description of measures and values",
"type": "object",
"properties": {
"results": {
"$ref": "data-result.json"
},
"dimensions": {
"type": "array",
"description": "An array of data dimensions included in a result set",
"items": {
"$ref": "data-dimension.json"
},
"uniqueItems": true
},
"measure": {
"$ref": "data-measure.json",
"description": "single measure represented in this data set."
}
},
}
Моя проблема в том, что у меня есть эта схема JSON с этой ссылкой на внешний файл, data-result.json
, но JSON.net еще не знает, что он существует. Есть ли какое-то решение для этого? У меня есть одна идея: просмотреть схему и, если есть какие-либо ссылки на внешние файлы, проанализировать те из них, у которых есть общий JsonSchemaResolver
. Мне пришлось бы добавить соответствующие идентификаторы, поскольку похоже, что $ref
любит сопоставляться по идентификатору, хотя на json-schema.org есть явные примеры использования $ref
с имена файлов. Я хотел бы знать, есть ли лучший способ, чтобы JSON.net изначально поддерживал ссылки на внешние схемы.
Исходный код размещен на Github, если это поможет. Я протестировал с удаленным полем $ref
, и он успешно компилируется.