自动生成的架构仅在内存中完成时才有效

时间:2017-04-04 22:24:43

标签: c# json json.net

我从当前存在的类生成了一个Json Schema。

JSchemaGenerator generator = new JSchemaGenerator();                    
JSchema schema = generator.Generate(typeof(Client));

这将验证很好,但是,我需要放置依赖项(您无法从类中执行此操作),因此我将Schema结果复制到文件中。现在,该文件将在http://www.jsonschemavalidator.net/上验证为正常。但是,当我尝试使用以下内容加载它时:

using (StreamReader file = File.OpenText("c:\\myJson.json"))
{
    file.BaseStream.Position = 0;

    using (JsonTextReader reader = new JsonTextReader(file))
    {
        JSchema schema2 = JSchema.Load(reader);
    }
}

我总是会在文件中的任何内部引用上出错:

"Contact": {"$ref": "#/definitions/Contact"},

An exception of type 'Newtonsoft.Json.Schema.JSchemaReaderException'
occurred in Newtonsoft.Json.Schema.dll but was not handled in user code

Additional information: Could not resolve schema reference 
'#/definitions/Contact/ Path 'definitions.Contact' Line 120, position 20

如果在内存中完成,为什么会这样,但是如果从文件加载会失败?

1 个答案:

答案 0 :(得分:0)

所以我发现了问题。虽然您可以从现有模型生成架构,但它可能并不总能正确执行。

我们发现引用的一些类中添加了一个额外的Item层(不确定原因)一旦我们删除了“Item”的引用,它就可以了。它还在对象中生成了第二个Item层,我必须将其删除才能对该对象进行验证。