如何验证json.net?

时间:2016-10-06 15:10:42

标签: json.net jsonschema

您好我有以下情况:

JSON对象:

{
    "$id": "1",
    "someProp": "123",
    "children": [{
        "$id": "2",
        "$type": "ClassB",
        "Parent": {
            "$ref": "1"
        }
    }]
}

JSON架构:

{
    "id": "ClassA",
    "required": true,
    "type": [
        "object",
        "null"
    ],
    "properties": {
        "someProp": {
            "required": true,
            "type": [
                "string",
                "null"
            ]
        },
        "children": {
            "id": "List<Child>",
            "required": true,
            "type": [
                "array",
                "null"
            ],
            "items": {
                "id": "Child",
                "type": [
                    "object",
                    "null"
                ],
                "properties": {
                    "id": {
                        "required": true,
                        "type": "integer"
                    },
                    "parent": {
                        "$ref": "ClassA"
                    }
                }
            }
        }
    }
}

我有一个具有引用循环的复杂对象,因此我在配置对象时配置了json.net以进行引用。一切都按预期工作我可以序列化和反序列化对象,但是当我使用上述模式验证JSON对象时,我收到以下错误:

  

对象中缺少必需的属性:&#34; someProp&#34;,path:   object.Children [0] .parent

这是正确的,如何让架构看到引用JSON对象?

1 个答案:

答案 0 :(得分:0)

问题在于子数组

中对象的“id”属性
"properties": {
    "id": {
             "required": true,
             "type": "integer"
           },
    "parent": {
               "$ref": "ClassA"
              }
}

你说id要求拥有属性“id”而你在对象中没有该属性,要么将“id”更改为“$ id”,要么将其从属性列表中删除以满足模式。

"properties": {
    "$id": {
             "required": true,
             "type": "integer"
           },
    "parent": {
               "$ref": "ClassA"
              }
}

还要确保你有“id”/“$ id”整数值,即 "$id":2不是"$id":"2"