如何获取 JSON.NET JSchema 生成器以在 JSON 模式中呈现additionalProperties 属性

Ste*_*art 5 c# json.net jsonschema

我正在使用 JSON.NET JSchema Generator 创建基于用数据注释属性修饰的类的架构。我正在使用这样的生成器:

var generator = new JSchemaGenerator();
generator.ContractResolver = new CamelCasePropertyNamesContractResolver();
generator.SchemaIdGenerationHandling = SchemaIdGenerationHandling.TypeName;
var schema = generator.Generate(typeof(myType));
string jsonSchema = schema.ToString();
Run Code Online (Sandbox Code Playgroud)

这会生成一个示例架构,如下所示:

{
     "$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"
      ]
}
Run Code Online (Sandbox Code Playgroud)

希望能够生成一个架构,其中包含 和 的附加属性myTypemySubType如下所示:

{
     "$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
}
Run Code Online (Sandbox Code Playgroud)

如何使用 JSchema 生成器生成这样的模式?

是否有类级别的数据注释属性可以执行此操作?

小智 4

有点晚了,但今天我为此苦苦挣扎..

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

Run Code Online (Sandbox Code Playgroud)