【问题标题】:Add JSON Schema properties (title, description) to C# class properties using Json.NET JsonSchemaGenerator使用 Json.NET JsonSchemaGenerator 将 JSON Schema 属性(标题、描述)添加到 C# 类属性
【发布时间】:2014-02-03 14:53:22
【问题描述】:

我正在从 C# 中的类动态生成 HTML 表单。我目前的方法是在服务器端使用 Json.NET 中包含的 JsonSchemaGenerator 从 C# 类生成 JSON Schema,然后在客户端从这个 JSON Schema 呈现表单。

我希望能够将 JSON Schema 属性(例如 title or description)添加到 C# 类的属性中,但找不到任何简单的方法让 JsonSchemaGenerator 将这些属性包含在生成的模式中。

我可以使用 C# 属性 JsonObjectAttributeJsonArrayAttributeJsonDictionaryAttribute 之一将这些 JSON Schema 属性添加到类本身,但使用属性的 JsonProperty 属性,我只能更改是否属性是否必填。

本质上,我想要的是生成这个 JSON Schema:

{
    "type": "object",
    "properties": {
        "MyString": {
            "type": "string",
            "title": "Title for my string"
        }
    }
}

来自这个类:

class MyClass
{
    public string MyString { get; set; }
}

我应该编写自定义JsonConverter 还是手动添加架构属性? Json.NET 不是适合这项工作的工具吗? JSON Schema 首先是错误的格式吗?还是我错过了 JsonSchemaGenerator 的一些奇特功能?

【问题讨论】:

  • 您好,您是否找到了如何使用 Json.NET 执行此操作的解决方案?我还需要指定属性描述...
  • 我修改了 Json.NET 来做我想做的事,但是这些更改并没有合并到主项目中。不过可以在这里找到它们:github.com/kimsey0/Newtonsoft.Json/commits/master
  • 它被拒绝了,因为它包含多个功能。也许我们应该为每个功能创建一个分支?
  • 是的,没错。我为工作制作了补丁,我们离开了 JsonSchemaGenerator,我还没有时间清理拉取请求。随意分叉该项目两次,应用我的补丁并为每个补丁提交一个拉取请求 - 我很高兴看到它们合并。

标签: c# json json.net jsonschema


【解决方案1】:

JsonSchemaGenerator 认为一个类型的所有对象都具有相同的模式(一般意义上的“类型”,而不是Type 类)。它并非旨在支持属性的单个模式。它考虑类型的TitleDescription 属性,而不是属性(这就是它只查找JsonContainerAttribute 及其后代的原因)。因此,即使您设法使用 JsonConverter 作为解决方法(生成“类型”),它本质上也是一种 hack。

如果我理解正确的话,Json.NET 对待TitleDescription 的方式是错误的。我推荐submitting a feature request/bug report

附:我只是看了一下代码,不太确定。

【讨论】:

  • 谢谢。我同意你的看法,除了 JsonProperty 属性的 Required 属性允许我稍微更改每个属性的架构。但如果我找不到更好的答案,我肯定会提交功能请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-11
  • 2017-10-31
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多