2016-05-23 108 views
1

我希望定义部分能够更好地生成和组织,对我来说这意味着不允许在定义中建立深度,但是涉及结构的每个类树应该在定义部分有自己的入口,并通过$ ref引用。这意味着对于每个定义,我只会有一个属性列表,它们可能是原始类型(字符串,布尔等),或者是另一个定制类的另一个定义条目的$ ref。您也可以将其看作深度1定义,接近于如何在C#中最初定义类。Newtonsoft.Json.Schema.Generation:人类可读的“定义”部分

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

  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)); 

渲染:

{ 
    "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"

回答