可以为空的双精度数组{J} Schema

时间:2016-05-30 14:08:57

标签: c# json schema jsonschema

我使用JSON架构生成C#业务对象。

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

IList<double?> List { get; }

我想通过架构实现这一点。

通常为了使我能够使用这样的结构:

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

但这不适用于数组

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

这会生成IList<double>属性。

试图找到有关官方架构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; }
}

1 个答案:

答案 0 :(得分:0)

将问题分成两个问题可能更好:

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

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

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

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

    Q2与jsonschema无关,取决于自定义约定或实现。对于jsonschemaIListarray是相同的。

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