2017-05-24 11 views
0

json shemaを使用して、C#apiで受信オブジェクトパラメータを検証しようとしています。C#でjsonスキーマを使用してオブジェクトを検証する

void BuildSqlQueryFromSegment(JoinDefinition jsonDef); 

JsonDefinitionは、プロパティの多くと、複雑なオブジェクトです: はここに私のAPIプロトあります。プロパティの値は互いに依存しているため、ここではRequired、Min、Maxのような単純なvalidateur属性は使用できません。

一つの解決策は、Object型の代わりに文字列を渡すために、次のようになります。

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

は、私は非常に簡単にこれをimplmentすることができるよ、しかし、私は、このソリューションはスマートではない見つけます。

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

属性のこの種が存在しています:私が探して

はこのようなものでしょうか?そうでない場合は、どうすれば実装できますか?どのように私はスキームをチェックするために着信応答jsonの文字列に作用することができますか?

ありがとうございました。

+0

newtonsoftのjson.netライブラリにスキーマバリデータがありますが、それは無料ではありません。 http://www.newtonsoft.com/jsonschemaに関する詳しい情報があります。それでも、私はそれを使用していないので、あなたのニーズを満たすかどうかはわかりません。 – mcy

答えて

0

まずあなたは、文字列からJsonschemaを取得

 JObject jObject= JObject.Parse(JsonString); 

     bool valid = jObject.IsValid(Objschema); 

クラスのJSONスキーマからJsonStringスキーマの一致は、それが他の真falseを返す場合

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

よりJoinDefinitionクラスからJsonSchemaを作成する必要が

以下の名前空間を使用する必要があります

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

アウトキーワードでエラーをキャッチできます IList errorMessages; bool valid = jObject.IsValid(スキーマ、out Objschema); –

+0

お返事ありがとうございます。私はすでにこれを知っていた、私の質問は、文字列からの開始を避けるために、このコードを属性にラップすることでした。どのように私は上記のコードを挿入することができる属性を実装することができますか? –

関連する問題