【问题标题】:Validate object using json schema in C#在 C# 中使用 json 模式验证对象
【发布时间】:2017-05-24 07:34:16
【问题描述】:

我正在尝试使用 json shema 来验证 C# api 中的传入对象参数。 这是我的 api 原型:

void BuildSqlQueryFromSegment(JoinDefinition jsonDef);

JsonDefinition 是一个复杂的对象,有很多属性。属性值是相互依赖的,这就是为什么不能在这里使用像Required、Min、Max这样的简单验证属性。

一种解决方案是传递一个字符串而不是类型对象:

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 字符串来检查架构?

感谢您的帮助。

【问题讨论】:

  • newtonsoft 的 json.net 库有一个模式验证器,但它不是免费的。您可能有更多关于newtonsoft.com/jsonschema 的信息。不过,我从未使用过它,所以我不知道它是否能满足您的需求。

标签: c# json jsonschema


【解决方案1】:

首先你需要从 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;

【讨论】:

  • 您可以使用关键字 IList errorMessages 捕获错误; bool valid = jObject.IsValid(schema, out Objschema);
  • 感谢您的回复。我已经知道这一点,我的问题是关于将此代码包装在属性中,以避免从字符串开始。我怎样才能实现一个属性,我可以插入上面的代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 2023-02-01
  • 1970-01-01
  • 2014-07-16
相关资源
最近更新 更多