c# - 使用 Json.NET JsonSchemaGenerator 将 JSON Schema 属性(标题、描述)添加到 C# 类属性

标签 c# json json.net jsonschema

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

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

我可以使用 C# 属性之一将这些 JSON 架构属性添加到类本身 JsonObjectAttribute , JsonArrayAttribute , 或 JsonDictionaryAttribute , 但使用 JsonProperty attribute 属性,我只能更改属性是否需要。

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

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

来自这个类(class):

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 Schema 属性(标题、描述)添加到 C# 类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21530430/

相关文章:

c# - JSON.NET:反序列化包含从接口(interface)派生的对象列表的类

c# - 智能卡 CMS 解密

c# - 编译 Expression<T> 时,它是否被隐式缓存?

c# - Richtextbox 多种背景颜色

json - 如何使用 POST 方法获取 JSON 对象并将其映射到 spring 3.0 Controller 中的对象?

PHP JSON返回字符串问题

mysql - 列出 MySQL JSON 字段的所有数组元素

entity-framework - 在Json.net中序列化一对多关系

c# - JsonSerializationException 解析

c# - 如何在 C# 中使用 flag 属性从枚举中取回位掩码值?