json模式验证。我如何接受数组或null?

时间:2013-07-09 17:19:46

标签: c# .net json

我们在rest层上实现了json模式验证(使用newtonsoft)。它真的有所作为,但我有一个可能性和如何的问题。

对于特定属性,以下内容有效(根据产品所有者):

....选择:[] .......

....选择:[“你好”,“世界”]

....选择:null .....

这是json模式定义的缩小示例

{
   'description': 'myDescription',
   'type': 'object',
   'properties':
    {
     'name': {'type':'string', 'required': true},
     'description': {'type':'string'},
     'choices': {'type': 'array', 
         'items': {'type': 'string'}}
}

显然前两个示例通过验证,但后者失败并出现“期待数组”错误。

该属性是可选的。

顺便说一句,如果有人有关于json模式定义的完整文档的良好链接,我很乐意得到它。我没有找到一个好的单一来源,但我确信有一个。

谢谢。

-r

2 个答案:

答案 0 :(得分:15)

您可以指定可能类型的数组,如此;

"myProperty": { "type": [ "array", "null" ], "required":false }

如果“myProperty”属于类型数组中的任何类型,json将通过验证。我将required设置为false,因为您说这是一个可选属性,只有在json中不存在该属性时才会使它通过。如果您要求设置为false并且属性在json中但类型错误,则验证将失败。

这些是我所知道的关于json架构的最佳文档; http://json-schema.org/latest/json-schema-validation.html该网站缺少有用的示例,但您需要的任何详细信息都将在文档中。

答案 1 :(得分:1)

您是否尝试将choices的默认值设为[]

我假设,因为你说属性是可选的,你在C#中使用可选参数语法或者我是不正确的?