Exemple #1
0
        public override bool IsValid(JsonSchemaDefinitions definitions, JsonValue value, JsonSchemaCallback callback)
        {
            bool succeeded = true;
            JsonObject target = value as JsonObject;

            if (target == null)
                return true;

            foreach (string property in target.GetKeys())
            {
                if (items.ContainsKey(property))
                {
                    JsonPathSegment segment = new JsonPropertySegment(property);
                    JsonSchemaCallback scope = callback.Scope(segment);
                    JsonSchemaRule rule = items[property];

                    if (rule.IsValid(definitions, target.Get(property), scope) == false)
                    {
                        callback.Add(scope);
                        succeeded = false;
                    }
                }
            }

            return succeeded;
        }
        public override bool IsValid(JsonSchemaDefinitions definitions, JsonValue value, JsonSchemaCallback callback)
        {
            bool succeeded = true;
            JsonObject target = value as JsonObject;

            if (target == null)
                return true;

            foreach (Regex pattern in items.Keys)
            {
                foreach (string property in target.GetKeys().Where(x => pattern.IsMatch(x)))
                {
                    JsonSchemaRule rule = items[pattern];
                    JsonPathSegment segment = new JsonPropertySegment(property);
                    JsonSchemaCallback scope = callback.Scope(segment);

                    if (rule.IsValid(definitions, target.Get(property), callback) == false)
                    {
                        callback.Add(scope);
                        succeeded = false;
                    }
                }
            }

            return succeeded;
        }
        public override bool IsValid(JsonSchemaDefinitions definitions, JsonValue value, JsonSchemaCallback callback)
        {
            JsonObject target = value as JsonObject;

            if (target == null)
                return true;

            bool succeeded = true;
            List<string> left = new List<string>(target.GetKeys());

            foreach (string property in properties)
                left.Remove(property);

            foreach (Regex pattern in patterns)
                left.RemoveAll(pattern.IsMatch);

            if (left.Count == 0)
                return true;

            if (rule == null && left.Count > 0)
            {
                foreach (string property in left)
                    callback.Fail(new JsonPropertySegment(property), value, "The presence of any additional property is not allowed.");

                return false;
            }

            if (rule != null)
            {
                foreach (string property in left)
                {
                    JsonPathSegment segment = new JsonPropertySegment(property);
                    JsonSchemaCallback scope = callback.Scope(segment);

                    if (rule.IsValid(definitions, target.Get(property), scope) == false)
                    {
                        callback.Add(scope);
                        succeeded = false;
                    }
                }
            }

            return succeeded;
        }
Exemple #4
0
        public override bool IsValid(JsonSchemaDefinitions definitions, JsonValue value, JsonSchemaCallback callback)
        {
            bool succeeded = true;
            JsonObject target = value.As<JsonObject>();

            if (target == null)
                return true;

            foreach (string property in byName.Keys)
                if (target.Contains(property))
                    foreach (string dependency in byName[property])
                        if (target.Contains(dependency) == false)
                        {
                            JsonPathSegment segment = new JsonPropertySegment(property);

                            callback.Fail(segment, value, $"The dependency is not valid. Missing property: {dependency}.");
                            succeeded = false;
                        }

            foreach (string property in byRule.Keys)
            {
                if (target.Contains(property))
                {
                    JsonSchemaRule rule = byRule[property];
                    JsonPathSegment segment = new JsonPropertySegment(property);
                    JsonSchemaCallback scope = callback.Scope(segment);

                    if (rule.IsValid(definitions, value, scope) == false)
                    {
                        callback.Add(scope);
                        succeeded = false;
                    }
                }
            }

            return succeeded;
        }