我尝试使用json shema来验证C#api中传入的objet参数。 这是我的api原型:
void BuildSqlQueryFromSegment(JoinDefinition jsonDef);
JsonDefinition是一个复杂的对象,具有许多属性。属性值相互依赖,这就是为什么不能使用像Required,Min,Max这样的简单validateur属性的原因。
一种解决方案是传递字符串而不是类型对象:
void BuildSqlQueryFromSegment(string jsonDef) {
// Check shema here, using Json.NET Schema
// if ok, deserialize and get the JsonDefition object instance
}
我能够很容易地实现这一点,但我觉得这个解决方案并不聪明。
我正在寻找的是这样的:
void BuildSqlQueryFromSegment([SchemaValidation('MySchemaResourceHere')] JoinDefinition jsonDef);
这种属性是否存在?如果没有,我该如何实施呢?如何对传入的响应json字符串进行操作以检查模式?
感谢您的帮助。
答案 0 :(得分:0)
首先,您需要从JoinDefinition类
创建JsonSchema JsonSchemaGenerator schemaGenerator = new JsonSchemaGenerator{ };
var o = new JoinDefinition ();
JsonSchema Objschema = schemaGenerator.Generate(o.GetType());
从字符串
获取Jsonschema JObject jObject= JObject.Parse(JsonString);
bool valid = jObject.IsValid(Objschema);
如果JsonString模式与类json模式匹配,则返回true,否则返回false
您必须使用以下命名空间
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Schema;