2017-05-24 4 views
0

Ich versuche, ein JSON-Shema zu verwenden, um einen eingehenden Objektparameter in einem C# API zu überprüfen. Hier ist meine api Proto:Validieren Sie Objekt mithilfe von JSON-Schema in C#

void BuildSqlQueryFromSegment(JoinDefinition jsonDef); 

JsonDefinition ist ein komplexen Objekte, mit vielen Eigenschaften. Die Werte der Eigenschaften sind voneinander abhängig, deshalb können hier einfache Validateurattribute wie Required, Min, Max nicht verwendet werden.

Eine Lösung wäre eine Zeichenfolge anstelle des Typs Objekt zu übergeben:

void BuildSqlQueryFromSegment(string jsonDef) { 
    // Check shema here, using Json.NET Schema 
    // if ok, deserialize and get the JsonDefition object instance 
} 

Ich bin in der Lage dies ganz leicht implment, aber ich finde diese Lösung nicht klug.

Was ich suche ist so etwas wie dieses:

void BuildSqlQueryFromSegment([SchemaValidation('MySchemaResourceHere')] JoinDefinition jsonDef); 

Enthält diese Art von Attribut existieren? Wenn nicht, wie kann ich es implementieren? Wie kann ich auf eingehende Antwort-JSON-Zeichenfolge reagieren, um das Schema zu überprüfen?

Danke für Ihre Hilfe.

+0

Die json.net-Bibliothek von newtonsoft hat einen Schema-Validator, ist aber nicht kostenlos. Möglicherweise haben Sie weitere Informationen auf http://www.newtonsoft.com/jsonschema. Trotzdem habe ich es nie benutzt, also weiß ich nicht, ob es Ihren Bedürfnissen entspricht. – mcy

Antwort

0

Zuerst müssen Sie JsonSchema von JoinDefinition Klasse

 JsonSchemaGenerator schemaGenerator = new JsonSchemaGenerator{ }; 
     var o = new JoinDefinition(); 
     JsonSchema Objschema = schemaGenerator.Generate(o.GetType()); 

als erhalten Jsonschema von String

 JObject jObject= JObject.Parse(JsonString); 

     bool valid = jObject.IsValid(Objschema); 

Wenn JsonString Schema Spiel aus der Klasse json Schema erstellen wäre es wahr, sonst false zurück

Sie müssen den folgenden Namensraum verwenden

 using Newtonsoft.Json; 
     using Newtonsoft.Json.Linq; 
     using Newtonsoft.Json.Schema; 
+0

Sie können Fehler mit out Schlüsselwort IList errorMessages; bool valid = jObject.IsValid (Schema, aus Objschema); –

+0

Danke für Ihre Antwort. Ich wusste das bereits. Meine Frage bestand darin, diesen Code in ein Attribut einzufügen, um zu vermeiden, mit einer Zeichenfolge zu beginnen. Wie kann ich ein Attribut implementieren, in das ich den obigen Code einfügen kann? –

Verwandte Themen