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

如何让JsonSchemaBuilder识别C# 11 required成员生成JSON Schema?

JsonEverything集成C# 11 required成员特性的问题解答

官方支持情况

目前JsonEverything的JsonSchemaBuilder默认不支持C# 11的required关键字,无法自动将标记为required的属性加入JSON Schema的required数组。查阅官方仓库的问题与讨论后,暂未发现相关支持计划或时间线。

手动实现方案

你可以通过反射检测属性上的RequiredMemberAttribute(C# 11编译器会自动为required属性添加该特性),手动将这些属性名补充到生成的Schema中。具体实现如下:

1. 编写必填属性检测工具

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.CompilerServices;

public static class RequiredPropertyHelper
{
    public static IEnumerable<string> GetRequiredProperties(Type targetType)
    {
        foreach (var prop in targetType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
        {
            if (prop.IsDefined(typeof(RequiredMemberAttribute)))
            {
                yield return prop.Name;
            }
        }
    }
}

2. 修改Schema生成逻辑

// 生成基础JSON Schema
var baseSchema = new JsonSchemaBuilder()
    .Schema("http://json-schema.org/draft-07/schema#")
    .Title("你的标题")
    .Description("你的描述")
    .FromType(typeof(Example))
    .Build();

// 补充C# 11 required属性到必填列表
var requiredPropNames = RequiredPropertyHelper.GetRequiredProperties(typeof(Example));
foreach (var propName in requiredPropNames)
{
    if (!baseSchema.Required.Contains(propName))
    {
        baseSchema.Required.Add(propName);
    }
}

通过以上代码,无需额外添加[Required]特性,仅靠C# 11的required关键字就能让对应属性在JSON Schema中成为必填项。

内容的提问来源于stack exchange,提问作者Sebastian Rendon Arteaga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:30:55