You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向现有JSON Schema新增字段并在流水线动态生成C#类

解决方案

合并JSON Schema的实现方式

无需手动拷贝字段合并,可通过JSON Schema原生的allOf关键字实现多Schema拼接,适配你要新增字段的需求:

  1. 基础Schema(base.schema.json,修正原示例required字段笔误,原必填字段应为productName)
{
  "type": "object",
  "required": [ "productName" ],
  "additionalProperties": false,
  "properties": {
    "productName": {
      "enum": [ "product1", "product2", "product3" ]
    },
    "price": { "type": "integer" }
  }
}
  1. 扩展字段Schema(extension.schema.json,存放新增的productQuantity字段定义)
{
  "type": "object",
  "required": [ "productQuantity" ],
  "properties": {
    "productQuantity": {
      "type": "integer",
      "minimum": 1
    }
  }
}
  1. 合并后的总Schema(merged.schema.json)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "allOf": [
    { "$ref": "base.schema.json" },
    { "$ref": "extension.schema.json" }
  ],
  "unevaluatedProperties": false
}

注意:使用allOf拼接多Schema时,需用unevaluatedProperties替代additionalProperties限制额外字段,后者无法识别allOf引入的属性

跨Schema引用规则

无需重复定义公共字段/结构,JSON Schema支持通过$ref关键字引用任意Schema的指定片段:

  1. 公共定义Schema(common.schema.json)示例
{
  "$defs": {
    "priceType": {
      "type": "integer",
      "minimum": 0,
      "maximum": 99999
    }
  }
}
  1. 引用方式:在需要复用该结构的位置直接填写对应路径即可
"price": { "$ref": "common.schema.json#/$defs/priceType" }

GitHub Pipeline生成C#类的操作步骤

选择NJsonSchema作为代码生成工具,原生支持$ref和allOf语法,无需提前手动合并Schema:

  • 本地/CI环境提前安装dotnet工具:
    dotnet tool install --global NJsonSchema.CodeGeneration.CSharp.Tool
  • 在Pipeline构建流程中添加生成命令,直接读取总Schema生成C#类:
    njsonschema generate-csharp /input:merged.schema.json /output:YourProject/Models/Product.cs /namespace:YourProject.Models
  • 后续正常构建项目即可,生成的C#类会自动包含所有继承/引用的字段。

内容的提问来源于stack exchange,提问作者briswill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:15:05