簡體   English   中英

Json.NET架構是否忽略$ schema?

[英]Does Json.NET Schema Ignore $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));
        }
    }
}

如果我改變$schema內的值myV4Schema指向V3或反之亦然myV3Schema我的兩個測試中繼續傳承。 我原以為他們會失敗並報告格式錯誤的架構(由於required屬性)。

我誤解了什么或者我做錯了什么?

使用“$ schema”驗證架構是否符合規范將在未來的版本中很快出現。 現在,始終支持V3和V4。

更新: $ schema在NuGet的最新版本中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM