【问题标题】:JSON Schema for array of nullable doubles可空双精度数组的 JSON 模式
【发布时间】:2016-09-28 09:45:23
【问题描述】:

我正在使用 JSON 模式来生成 C# 业务对象。

我的一个对象包含一个带有可以为空的双精度列表的属性。

IList<double?> List { get; }

我想通过模式来实现它。

为了实现这一点,我通常使用这样的结构:

"type": "number",
"required": false

但这不适用于数组

"Values": {
     "type": "array",
     "items": {
         "required": false,
         "type": "number"
     }
}

这会生成IList&lt;double&gt; 属性。

试图找到有关官方架构site 的一些信息。这是一个相当糟糕的网站..

有没有办法在不创建新数据类型的情况下实现这种结构?

UPD.1 我正在为C# 代码使用jsonclassgenerator 生成器。无法迁移其他工具...

UPD.2

"MyType": {
        "id": "MyType",
        "type": "object",
        "properties": {
            "Values": {
                "type": "array",
                "items": {
                    "type": "number",
                    "required": false
                }
            }
        }
    }

生成的类:

public partial class MyType
{
   public string Title { get; set; }
   public IList<double> Values { get; set; }
}

【问题讨论】:

  • 我没有看到从模式生成类的明显方法,只能从一些示例 JSON 中生成。你能补充一些关于你如何使用这个工具的信息吗?

标签: c# json schema jsonschema


【解决方案1】:

最好把你的问题分成两个问题:

  1. 如何表达一个包含数字或数组的jsonschema 空值。

  2. 如何从 jsonschema 定义创建类型。

Q1 可以通过多种方式解决。我建议这样使用 and oneOf 子句:

"MyType" : {
    "id" : "MyType",
    "type" : "object",
    "properties" : {
        "Values" : {
            "type" : "array",
            "items" : {
                "oneOf" : [{
                        "type" : "number"
                    }, {
                        "type" : "null"
                    }
                ]
            }
        }
    }
}

Q2 与jsonschema 无关,取决于自定义约定或实现。对于 jsonschemaIListarray 是一回事。

我建议您在反序列化结构中使用更通用的类型,并在需要时转换为 IList

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-24
    • 2011-07-07
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多