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

如何修改JSchema生成的JSON Schema响应中definitions下的类名

实现修改JSON Schema definitions节点名称的方案

你使用的Newtonsoft.Json.Schema组件默认以类名作为definitions节点的键值,DataContract特性不会直接作用于该命名规则,可通过以下两种方式实现需求:

方案1:自定义Schema生成规则(推荐,无硬编码)

通过实现自定义JSchemaGenerationProvider重写类型定义的ID生成逻辑,代码示例如下:

public class CustomTypeNameGenerationProvider : JSchemaGenerationProvider
{
    // 配置类型和自定义definitions名称的映射关系
    private readonly Dictionary<Type, string> _typeNameMapping = new Dictionary<Type, string>
    {
        { typeof(DemoRequestModel), "models" }
    };

    public override JSchema GetSchema(JSchemaTypeGenerationContext context)
    {
        // 如果当前类型在映射列表中,生成带自定义ID的Schema
        if (_typeNameMapping.TryGetValue(context.ObjectType, out string customName))
        {
            var schema = context.Generator.Generate(context.ObjectType);
            schema.Id = new Uri(customName, UriKind.RelativeOrAbsolute);
            return schema;
        }
        return null;
    }

    public override bool CanGenerate(JSchemaTypeGenerationContext context)
    {
        return _typeNameMapping.ContainsKey(context.ObjectType);
    }
}

之后在生成Schema前把自定义Provider添加到生成器中即可:

JSchemaGenerator schemaGen = _schemaGenerator.Value;
schemaGen.GenerationProviders.Add(new CustomTypeNameGenerationProvider());
JSchema schemaResult = schemaGen.Generate(typeof(CreateDemoRequest));

方案2:生成后手动修改Schema结构(适合临时调整需求)

如果仅需对当前场景做一次性修改,可在生成Schema后直接调整JSON结构,同时同步更新引用路径:

JSchema schemaResult = schemaGen.Generate(typeof(CreateDemoRequest));

// 修改definitions节点的键名
var definition = schemaResult.Definitions["DemoRequestModel"];
schemaResult.Definitions.Remove("DemoRequestModel");
schemaResult.Definitions.Add("models", definition);

// 同步修改引用路径
var modelsProperty = schemaResult.Properties["models"];
modelsProperty.Items.Id = new Uri("#/definitions/models", UriKind.RelativeOrAbsolute);

两种方案最终生成的Schema中,definitions节点下的键都会替换为你需要的models名称,引用路径也会同步更新生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:39:02