我正在使用JSON.NET JSchema Generator来创建基于使用Data Annotation Attributes修饰的类的模式。我正在使用这样的生成器:
var generator = new JSchemaGenerator();
generator.ContractResolver = new CamelCasePropertyNamesContractResolver();
generator.SchemaIdGenerationHandling = SchemaIdGenerationHandling.TypeName;
var schema = generator.Generate(typeof(myType));
string jsonSchema = schema.ToString();
这会生成一个示例模式,如:
{
"$id": "myType",
"definitions": {
"mySubType" : {
"$id": "mySubType",
"type": [
"object",
"null"
],
"properties": {
"name": {
"type: "string"
}
},
"required": [
"name"
]
}
},
"type": "object",
"properties": {
"name": {
"type": "string"
},
"details": {
"$ref": "mySubType"
}
},
"required": [
"name",
"details"
]
}
我想要能够生成包含myType
和mySubType
的附加属性属性的架构,如下所示:
{
"$id": "myType",
"definitions": {
"mySubType" : {
"$id": "mySubType",
"type": [
"object",
"null"
],
"properties": {
"name": {
"type: "string"
}
},
"required": [
"name"
],
"additionalProperties": false
}
},
"type": "object",
"properties": {
"name": {
"type": "string"
},
"details": {
"$ref": "mySubClass"
}
},
"required": [
"name",
"details"
],
"additionalProperties": false
}
如何使用JSchema生成器生成这样的模式?
是否有类级数据注释属性可以执行此操作?
答案 0 :(得分:1)
有点晚了,但是我今天为此感到挣扎。
void Main()
{
var generator = new JSchemaGenerator();
generator.ContractResolver = new CamelCasePropertyNamesContractResolver();
generator.SchemaIdGenerationHandling = SchemaIdGenerationHandling.TypeName;
var schema = generator.Generate(typeof(myType));
RejectAdditionalProperties(schema);
string jsonSchema = schema.ToString();
}
static void RejectAdditionalProperties(JSchema schema)
{
schema.AllowAdditionalProperties = false;
foreach(var s in schema.Properties.Values) RejectAdditionalProperties(s);
}