首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Newtonsoft.Json.Schema.Generation:人类可读的“定义”部分

Newtonsoft.Json.Schema.Generation:人类可读的“定义”部分
EN

Stack Overflow用户
提问于 2016-05-23 22:15:30
回答 1查看 432关注 0票数 1

我想要更好地生成和组织定义部分,对我来说,这意味着不允许在定义中建立深度,但是,结构树中涉及的每个类都应该在定义部分中有自己的条目,并通过$ref引用。这意味着对于每个定义,我只有一个属性列表,这些属性要么是原始类型(string,boolean,等等)。或者可以是到另一个自定义类的另一个定义条目的$ref。您还可以将其视为深度1定义,接近于类最初在C#中的定义方式。

通过一个简单的例子来说明这一点:

代码语言:javascript
复制
            JSchemaGenerator schemaGenerator = new JSchemaGenerator();
            schemaGenerator = new JSchemaGenerator()
            {
                DefaultRequired = Newtonsoft.Json.Required.DisallowNull,
                SchemaIdGenerationHandling = SchemaIdGenerationHandling.TypeName,
                SchemaLocationHandling = SchemaLocationHandling.Definitions,
                SchemaReferenceHandling = SchemaReferenceHandling.Objects,
            };
            JSchema schema = schemaGenerator.Generate(typeof(Setting));

渲染:

代码语言:javascript
复制
{
  "id": "Setting",
  "definitions": {
    "SubSetting": {
      "id": "SubSetting",
      "type": "object",
      "properties": {
        "SubSubSetting": {
          "id": "SubSubSetting",
          "type": "object",
          "properties": {
            "String": {
              "type": "string"
            }
          }
        }
      }
    },
    "SubSubSetting": {
      "$ref": "SubSubSetting"
    }
  },
  "type": "object",
  "properties": {
    "SubSetting": {
      "$ref": "SubSetting"
    },
    "SubSubSetting": {
      "$ref": "SubSubSetting"
    }
  }
}

因此,SubSubSetting定义被放在内联SubSetting定义中,稍后我们将SubSubSetting定义为对该内联定义的引用。这就是我想要避免的,因为对于复杂的数据结构,它变得非常模糊,我想提供该模式,甚至作为基于数据注释和JsonProperty自动生成的活文档的一部分。

如何使用JSchemaGenerator实现这一点?

也许我不应该这样做,但作为第二个非常简短的问题:这些$ref在语法上是正确的吗?他们不应该看起来像"#/definitions/SubSetting"吗?

EN

回答 1

Stack Overflow用户

发布于 2017-08-26 09:23:40

最新版本的Json.NET架构(3.0.3)已更新以解决此问题。SubSubSetting将包含完整的定义,而不仅仅是一个$ref

https://github.com/JamesNK/Newtonsoft.Json.Schema/releases/tag/3.0.3

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37393443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档