Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JSON.NET JsonSchemaGenerator将JSON模式属性(标题、说明)添加到C#类属性中_C#_Json_Json.net_Jsonschema - Fatal编程技术网

使用JSON.NET JsonSchemaGenerator将JSON模式属性(标题、说明)添加到C#类属性中

使用JSON.NET JsonSchemaGenerator将JSON模式属性(标题、说明)添加到C#类属性中,c#,json,json.net,jsonschema,C#,Json,Json.net,Jsonschema,我正在研究从C#中的类动态生成HTML表单。我目前的方法是在服务器端使用Json.NET中包含的从C#类生成一个表单,然后在客户端从这个Json模式呈现表单 我希望能够将JSON模式属性(如a)添加到C#类的属性中,但找不到任何简单的方法让JsonSchemaGenerator在生成的模式中包含这些属性 我可以使用其中一个C#属性将这些JSON模式属性添加到类本身,或者,但是使用属性的属性,我只能更改该属性是否是必需的 本质上,我想要的是生成这个JSON模式: 本课程: 我应该在模式属性中手

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

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

我可以使用其中一个C#属性将这些JSON模式属性添加到类本身,或者,但是使用属性的属性,我只能更改该属性是否是必需的

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

本课程:


我应该在模式属性中手动编写自定义或添加吗?Json.NET不是适合该作业的工具吗?JSON模式一开始是错误的格式吗?还是我错过了JsonSchemaGenerator的一些奇特功能?

JsonSchemaGenerator
认为一个类型的所有对象都具有相同的模式(“类型”在泛型意义上,而不是
type
class)。它不是为支持属性的单个模式而设计的。它考虑类型的
Title
Description
属性,而不是属性的属性(这就是为什么它只查找
JsonContainerAttribute
及其子体)。因此,即使您设法使用
JsonConverter
作为一种变通方法(生成“类型”),它本质上也是一种黑客行为

如果我理解正确的话,Json.NET对待
Title
Description
的方式是错误的。我推荐


另外,我只是看了一下代码,我不太确定。

谢谢。我同意您的看法,只是JsonProperty属性的必需属性允许我稍微更改每个属性的模式。但是如果我找不到更好的答案,我肯定会提交一个功能请求。嗨,你找到了如何使用Json.NET实现这一点的解决方案吗?我还需要指定属性描述……我修改了Json.NET来完成我想要做的事情,但是更改没有合并到主项目中。但是可以在这里找到:它被拒绝了,因为它包含多个特性。也许我们应该为每个功能创建一个分叉?是的,这是正确的。我为工作做了补丁,我们离开了JsonSchemaGenerator,我没有时间清理拉请求。尽管如此,您可以自由地对项目进行两次分叉,应用我的补丁,并为每个补丁提交一个拉取请求——我很高兴看到它们合并在一起。
{
    "type": "object",
    "properties": {
        "MyString": {
            "type": "string",
            "title": "Title for my string"
        }
    }
}
class MyClass
{
    public string MyString { get; set; }
}