.NET 9 中的 JsonSchemaExporter
内容提要
NET 9 Preview 6 引入了 JsonSchemaExporter,可以基于类型生成 json schema。这为生成 JsonSchema 提供了便利。文章演示了如何使用 JsonSchemaExporter 生成 json schema 并自定义输出。文中还提到,JsonSchema 的支持仍处于早期阶段,对于复杂需求可能需要进一步扩展。
延伸解读
JsonSerializerOptions 对 Schema 生成的影响
文章示例表明,使用不同的 JsonSerializerOptions 会显著改变生成的 JSON Schema。例如,JsonSerializerOptions.Web 会启用 CamelCase 命名,使属性名变为小写,同时允许字符串到数值的转换,因此 id 属性的类型变为 ["string","integer"],并附加了数字格式的正则表达式。这提醒开发者,在生成 Schema 时需根据实际序列化配置选择合适的选项,以确保 Schema 与运行时行为一致。
自定义导出与 required 的灵活控制
除了使用 required 修饰符标记必填属性外,JsonSchemaExporterOptions 提供了 TransformSchemaNode 回调,允许在导出过程中动态修改 Schema 节点。文章演示了如何通过该回调将 id 或 Id 属性自动添加到 required 数组中,即使类型未标记 required。这种机制为复杂场景提供了灵活性,但需注意自定义逻辑可能增加维护成本,简单需求直接使用 required 修饰符更为简洁。
当前局限与未来展望
文章指出,.NET 9 中 JsonSchema 的支持仍处于早期阶段,对于复杂需求可能需要自行扩展。例如,设置 Schema 的特定约束需通过自定义导出实现。预计 .NET 10 会继续优化和增强相关功能。因此,开发者在采用时需评估现有功能是否满足项目要求,并关注后续版本更新,以便及时利用新特性。
Q&A
.NET 9 中的 JsonSchemaExporter 有什么新功能?
.NET 9 Preview 6 引入了 JsonSchemaExporter,可以根据类型生成 json schema,提供了更方便的生成方式。
如何使用 JsonSchemaExporter 生成 json schema?
可以使用 JsonSchemaExporter.GetJsonSchemaAsNode 方法,并传入 JsonSerializerOptions 和类型来生成 json schema。
如何设置 json schema 中的必填属性?
可以通过在属性上添加 required 修饰符来设置该属性为必填项。
JsonSerializerOptions 对 json schema 有什么影响?
JsonSerializerOptions 会影响生成的 json schema 的命名规则和属性类型,例如使用 Web 选项会将属性名转换为小写。
JsonSchemaExporter 支持的功能是否完善?
当前 JsonSchema 的支持仍处于早期阶段,对于复杂需求可能需要进一步扩展。
.NET 10 对 JsonSchema 的支持有什么计划?
.NET 10 预计将继续优化和增强 JsonSchema 的功能。