2016-10-06 4 views
2

Hallo ich habe folgendes Szenario:Wie validiert Zeiger in json.net?

JSON-Objekt:

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

JSON Schema:

{ 
    "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" 
        } 
       } 
      } 
     } 
    } 
} 

Ich habe eine komplexe Aufgabe, die Referenz Schleifen hat, so habe ich konfiguriert json.net Referenzieren, wenn das Objekt serialisiert wird. Alles funktioniert wie erwartet Ich kann das Objekt serialisiert und deserialisiert, aber wenn ich das JSON-Objekt mit dem obigen Schema bin Validierung bekam ich folgende Fehlermeldung:

Erforderliche Eigenschaften fehlen Objekt: „someProp“, Pfad: object.Children [0] .parent

Und das ist richtig, wie das Schema Blick auf dem Referenz-JSON-Objekt machen kann?

Antwort

0

Problem mit der „id“ Eigenschaft eines Objekts innerhalb Kinder Array ist

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

Sie id sagen werden, erfordert Eigenschaft „id“ haben, und Sie haben diese Eigenschaft nicht innerhalb Objekt, entweder changes " id "to" $ id "oder entfernen Sie es aus der Eigenschaftsliste, um das Schema zu erfüllen.

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

Auch stellen Sie sicher, "id"/"$ id" Integer-Wert haben, das heißt "$id":2 nicht "$id":"2"