在C#中使用json模式验证对象

时间:2017-05-24 07:34:17

标签: c# json jsonschema

我尝试使用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字符串进行操作以检查模式?

感谢您的帮助。

1 个答案:

答案 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;