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

如何基于父元素名称为JSON Schema的DefaultValue设置不同类型(Json.Net)

解决方案

JSON Schema 示例

直接针对指定的父元素名称,分别定义其内部DefaultValue的类型:

{
  "type": "object",
  "properties": {
    "TestTestForm1": {
      "type": "object",
      "properties": {
        "DefaultValue": {
          "type": "number"
        }
      },
      "required": ["DefaultValue"] // 根据需求决定是否必填
    },
    "TestForm2": {
      "type": "object",
      "properties": {
        "DefaultValue": {
          "type": "string"
        }
      },
      "required": ["DefaultValue"] // 根据需求决定是否必填
    }
  }
}

该Schema的验证规则:

  • 父元素为TestTestForm1时,其下的DefaultValue必须是数字类型
  • 父元素为TestForm2时,其下的DefaultValue必须是字符串类型

C# 实现示例(使用Json.Net库)

先确保已安装Newtonsoft.Json.Schema NuGet包,再通过手动构建Schema对象实现需求:

using Newtonsoft.Json.Schema;

// 构建根级Schema
var rootSchema = new JsonSchema
{
    Type = JsonSchemaType.Object
};

// 配置TestTestForm1对应的子Schema
var testTestForm1Schema = new JsonSchema
{
    Type = JsonSchemaType.Object,
    Properties = { ["DefaultValue"] = new JsonSchema { Type = JsonSchemaType.Number } },
    Required = { "DefaultValue" } // 可选,若需要DefaultValue必填则保留
};
rootSchema.Properties.Add("TestTestForm1", testTestForm1Schema);

// 配置TestForm2对应的子Schema
var testForm2Schema = new JsonSchema
{
    Type = JsonSchemaType.Object,
    Properties = { ["DefaultValue"] = new JsonSchema { Type = JsonSchemaType.String } },
    Required = { "DefaultValue" } // 可选,若需要DefaultValue必填则保留
};
rootSchema.Properties.Add("TestForm2", testForm2Schema);

// 输出Schema的JSON字符串
string schemaJson = rootSchema.ToString();
Console.WriteLine(schemaJson);

补充说明

你之前尝试的allOf+if/then写法无效,是因为该语法主要用于基于属性值的条件判断,而非属性名称。针对固定的父元素名称,直接在properties中为每个特定键定义专属结构,是最直接有效的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:52:22