我希望定义部分能够更好地生成和组织,对我来说这意味着不允许在定义中建立深度,但是涉及结构的每个类树应该在定义部分有自己的入口,并通过$ 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"
?