如何让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
相关产品推荐
相关产品推荐

