Json.NET模式会忽略$ schema吗?

标记

JSON Schema草案规范描述$schema关键字“作为JSON Schema版本标识符和本身就是JSON Schema的资源的位置”的用法但是,当我尝试验证v3和v4草案支持时,我看不到$schema所考虑值。例如,考虑以下测试夹具。

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Schema;
using NUnit.Framework;
using System.Collections.Generic;
using System.IO;

namespace JsonSchemaExamples
{
    [TestFixture]
    public class ValidatorPlay
    {
        #region schema definitions
        private const string myV4Schema = @"{
            '$schema': 'http://json-schema.org/draft-04/schema#',
            'type': 'object',
            'properties':
            {
                'first_name': { 'type': 'string' },
                'address':
                {
                    'type': 'object',
                    'properties':
                    {
                        'street_address': { 'type': 'string' },
                        'state': { 'type': 'string' }
                    }
                }
            },
            'required' : ['first_name']
        }";

        private const string myV3Schema = @"{
            '$schema': 'http://json-schema.org/draft-03/schema#',
            'type': 'object',
            'properties':
            {
                'first_name':
                {
                    'type': 'string',
                    'required': true
                },
                'address':
                {
                    'type': 'object',
                    'properties':
                    {
                        'street_address': { 'type': 'string' },
                        'state': { 'type': 'string' }
                    }
                }
            }
        }";
        #endregion

        #region json to validate
        private JObject validPerson = JObject.Parse(@"{
                'first_name' : 'Mark',
                'age': 32,
                'address' :
                {
                    'street': '1 Main Street',
                    'postcode': 'AB12 0CD'
                }
            }");

        private JObject invalidPerson = JObject.Parse(@"{
                'Name' : 'Mark',
                'age': 32,
                'address' :
                {
                    'street': '1 Main Street',
                    'postcode': 'AB12 0CD'
                }
            }");
        #endregion

        [TestCase(myV4Schema)]
        [TestCase(myV3Schema)]
        public void CheckDraftSupport(string schemaToUse)
        {
            JSchemaUrlResolver resolver = new JSchemaUrlResolver();
            JSchema schema = JSchema.Parse(schemaToUse, resolver);
            Assert.That(validPerson.IsValid(schema));
            Assert.That(!invalidPerson.IsValid(schema));
        }
    }
}

如果我更改了其中的$schemamyV4Schema以指向v3,反之亦然,那么myV3Schema我的两个测试都将继续通过。我本以为他们会失败并报告格式错误的架构(由于该required属性)。

我误解了什么或做错了什么?

詹姆斯·牛顿·金

在以后的版本中,将很快使用“ $ schema”验证模式是否符合规范。现在,始终支持V3和V4。

更新: $ schema用于NuGet的最新版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JSON模式应该要求文档声明$ schema(是自引用的)吗?

来自分类Dev

Json Schema-忽略数组中字符串的验证模式

来自分类Dev

json模式有json模式吗?

来自分类Dev

Newtonsoft.Json.Schema.JsonSchema已过时吗?

来自分类Dev

使用版本草稿07进行Spring Boot json模式验证会抛出JsonSchemaException:Unknown MetaSchema:https://json-schema.org/draft-07/schema

来自分类Dev

从 json 中引用 JSON Schema 类似 XML 引用 XML 模式

来自分类Dev

Json.Net.Schema:如何生成仅需要[Required]属性的模式?

来自分类Dev

Newtonsoft JSON Schema忽略用于反序列化的验证

来自分类Dev

Newtonsoft.Json.Schema未针对JSON模式正确验证JSON输入

来自分类Dev

读取嵌入 JSON 的图表也会读取 JSON 文件吗?

来自分类Dev

JSON模式是否应要求文档声明$ schema(是自引用的)?

来自分类Dev

git GUI会忽略.gitignore文件吗?

来自分类Dev

SSH会忽略我的ForwardAgent配置吗?

来自分类Dev

HTML(5)会忽略字素吗?

来自分类Dev

JavaScript会忽略多余的空格吗?

来自分类Dev

浮动元素会忽略填充吗?

来自分类Dev

块元素会忽略浮动元素吗?

来自分类Dev

SSH会忽略我的ForwardAgent配置吗?

来自分类Dev

git GUI会忽略.gitignore文件吗?

来自分类Dev

JSON模式验证器可以被该模式杀死吗?

来自分类Dev

如何使用 Json.NET.Schema 要求属性?

来自分类Dev

在oracle中,我可以将默认模式与SCHEMA <> USERID的USER ID关联吗?

来自分类Dev

Json.NET JsonSerializer线程安全吗?

来自分类Dev

json.loads可以忽略结尾的逗号吗?

来自分类Dev

序列化为JSON时可以忽略serialVersionUID吗?

来自分类Dev

模式匹配会丢失类型界限吗?

来自分类Dev

在恢复模式下会丢失数据吗?

来自分类Dev

存储库模式会杀死ORM吗?

来自分类Dev

MVC路由会查找模式或名称吗

Related 相关文章

  1. 1

    JSON模式应该要求文档声明$ schema(是自引用的)吗?

  2. 2

    Json Schema-忽略数组中字符串的验证模式

  3. 3

    json模式有json模式吗?

  4. 4

    Newtonsoft.Json.Schema.JsonSchema已过时吗?

  5. 5

    使用版本草稿07进行Spring Boot json模式验证会抛出JsonSchemaException:Unknown MetaSchema:https://json-schema.org/draft-07/schema

  6. 6

    从 json 中引用 JSON Schema 类似 XML 引用 XML 模式

  7. 7

    Json.Net.Schema:如何生成仅需要[Required]属性的模式?

  8. 8

    Newtonsoft JSON Schema忽略用于反序列化的验证

  9. 9

    Newtonsoft.Json.Schema未针对JSON模式正确验证JSON输入

  10. 10

    读取嵌入 JSON 的图表也会读取 JSON 文件吗?

  11. 11

    JSON模式是否应要求文档声明$ schema(是自引用的)?

  12. 12

    git GUI会忽略.gitignore文件吗?

  13. 13

    SSH会忽略我的ForwardAgent配置吗?

  14. 14

    HTML(5)会忽略字素吗?

  15. 15

    JavaScript会忽略多余的空格吗?

  16. 16

    浮动元素会忽略填充吗?

  17. 17

    块元素会忽略浮动元素吗?

  18. 18

    SSH会忽略我的ForwardAgent配置吗?

  19. 19

    git GUI会忽略.gitignore文件吗?

  20. 20

    JSON模式验证器可以被该模式杀死吗?

  21. 21

    如何使用 Json.NET.Schema 要求属性?

  22. 22

    在oracle中,我可以将默认模式与SCHEMA <> USERID的USER ID关联吗?

  23. 23

    Json.NET JsonSerializer线程安全吗?

  24. 24

    json.loads可以忽略结尾的逗号吗?

  25. 25

    序列化为JSON时可以忽略serialVersionUID吗?

  26. 26

    模式匹配会丢失类型界限吗?

  27. 27

    在恢复模式下会丢失数据吗?

  28. 28

    存储库模式会杀死ORM吗?

  29. 29

    MVC路由会查找模式或名称吗

热门标签

归档