使用Json.NET JsonSchemaGenerator将JSON模式属性(标题,描述)添加到C#类属性

时间:2014-02-03 14:53:22

标签: c# json json.net jsonschema

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

我希望能够将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的一些奇特功能?

1 个答案:

答案 0 :(得分:1)

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

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

P.S。我只看了代码,我不太确定。