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

我希望能够将JSON架构属性(例如title or description)添加到C#类的属性,但是找不到任何简单的方法来使JsonSchemaGenerator包括在生成的架构中。

我可以使用C#属性JsonObjectAttributeJsonArrayAttributeJsonDictionaryAttribute之一将这些JSON Schema属性添加到类本身,但是对于属性使用JsonProperty属性,我只能更改是否需要该属性或不。

本质上,我想要的是生成此JSON模式:


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


从此类:


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


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

最佳答案

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

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

附言我只是看了一下代码,但不确定。

关于c# - 使用Json.NET JsonSchemaGenerator将JSON模式属性(标题,描述)添加到C#类属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21530430/

10-12 12:36
查看更多