Example #1
0
        private (SCHEMA2 Model, Validation.ValidationResult Validation) _Read(BYTES jsonUtf8Bytes)
        {
            Guard.NotNull(jsonUtf8Bytes, nameof(jsonUtf8Bytes));

            var root = new SCHEMA2();

            var vcontext = new Validation.ValidationResult(root, this.Validation);

            var reader = new Utf8JsonReader(jsonUtf8Bytes);

            if (!reader.Read())
            {
                vcontext.AddError(new Validation.ModelException(root, "Json is empty"));
                return(null, vcontext);
            }

            try
            {
                root.Deserialize(ref reader);
                root.OnDeserializationCompleted();
            }
            catch (JsonException rex)
            {
                vcontext.AddError(new Validation.SchemaException(root, rex));
                return(null, vcontext);
            }

            // schema validation

            root.ValidateReferences(vcontext.GetContext());
            var ex = vcontext.Errors.FirstOrDefault();

            if (ex != null)
            {
                return(null, vcontext);
            }

            // resolve external dependencies

            root._ResolveSatelliteDependencies(this);

            // full validation

            if (this.Validation != VALIDATIONMODE.Skip)
            {
                root.Validate(vcontext.GetContext());
                ex = vcontext.Errors.FirstOrDefault();
                if (ex != null)
                {
                    return(null, vcontext);
                }
            }

            return(root, vcontext);
        }
Example #2
0
        private (SCHEMA2 Model, Validation.ValidationResult Validation) _Read(ReadOnlyMemory <Byte> jsonUtf8Bytes)
        {
            var root     = new SCHEMA2();
            var vcontext = new Validation.ValidationResult(root, this.Validation);

            #if !SUPRESSTRYCATCH
            try {
            #endif

            if (jsonUtf8Bytes.IsEmpty)
            {
                throw new System.Text.Json.JsonException("JSon is empty.");
            }

            var reader = new Utf8JsonReader(jsonUtf8Bytes.Span);

            if (!reader.Read())
            {
                vcontext.SetError(new Validation.SchemaException(root, "Json is empty"));
                return(null, vcontext);
            }

            root.Deserialize(ref reader);
            root.OnDeserializationCompleted();

            // binary chunk check

            foreach (var b in root.LogicalBuffers)
            {
                b.OnValidateBinaryChunk(vcontext.GetContext(), this._BinaryChunk);
            }

            // schema validation

            if (this._CheckSupportedExtensions)
            {
                root._ValidateExtensions(vcontext.GetContext());
                var ex = vcontext.Errors.FirstOrDefault();
                if (ex != null)
                {
                    return(null, vcontext);
                }
            }

            // we must do a basic validation before resolving external dependencies

            if (true)
            {
                root.ValidateReferences(vcontext.GetContext());
                var ex = vcontext.Errors.FirstOrDefault();
                if (ex != null)
                {
                    return(null, vcontext);
                }
            }

            // resolve external dependencies

            root._ResolveSatelliteDependencies(this);

            // full validation

            if (this.Validation != VALIDATIONMODE.Skip)
            {
                root.ValidateContent(vcontext.GetContext());
                var ex = vcontext.Errors.FirstOrDefault();
                if (ex != null)
                {
                    return(null, vcontext);
                }
            }

            #if !SUPRESSTRYCATCH
        }

        catch (JsonException rex)
        {
            vcontext.SetError(new Validation.SchemaException(root, rex));
            return(null, vcontext);
        }
        catch (System.FormatException fex)
        {
            vcontext.SetError(new Validation.ModelException(null, fex));
            return(null, vcontext);
        }
        catch (ArgumentException aex)
        {
            vcontext.SetError(new Validation.ModelException(root, aex));
            return(null, vcontext);
        }
        catch (Validation.ModelException mex)
        {
            vcontext.SetError(mex);
            return(null, vcontext);
        }
            #endif

            return(root, vcontext);
        }
Example #3
0
        private (SCHEMA2 Model, Validation.ValidationResult Validation) _Read(ReadOnlyMemory <Byte> jsonUtf8Bytes)
        {
            var root = new SCHEMA2();

            var vcontext = new Validation.ValidationResult(root, this.Validation);

            if (jsonUtf8Bytes.IsEmpty)
            {
                vcontext.AddError(new Validation.SchemaException(null, "JSon is empty."));
            }

            var reader = new Utf8JsonReader(jsonUtf8Bytes.Span);

            try
            {
                if (!reader.Read())
                {
                    vcontext.AddError(new Validation.SchemaException(root, "Json is empty"));
                    return(null, vcontext);
                }

                root.Deserialize(ref reader);
                root.OnDeserializationCompleted();
            }
            catch (JsonException rex)
            {
                vcontext.AddError(new Validation.SchemaException(root, rex));
                return(null, vcontext);
            }

            // binary chunk check

            foreach (var b in root.LogicalBuffers)
            {
                b.OnValidateBinaryChunk(vcontext.GetContext(root), this._BinaryChunk);
            }

            // schema validation

            root.ValidateReferences(vcontext.GetContext());
            var ex = vcontext.Errors.FirstOrDefault();

            if (ex != null)
            {
                return(null, vcontext);
            }

            // resolve external dependencies

            root._ResolveSatelliteDependencies(this);

            // full validation

            if (this.Validation != VALIDATIONMODE.Skip)
            {
                root.Validate(vcontext.GetContext());
                ex = vcontext.Errors.FirstOrDefault();
                if (ex != null)
                {
                    return(null, vcontext);
                }
            }

            return(root, vcontext);
        }