コード例 #1
0
        protected override void ProcessRecord()
        {
            WriteDebug(string.Format("Continue: {0}", _Continue));
            if (!_Continue)
            {
                return;
            }

            Encoding enc = null;

            switch (this.Encoding)
            {
            case EncodingType.ASCII:
                WriteVerbose("Using ASCII encoding.");
                enc = System.Text.Encoding.ASCII;
                break;

            case EncodingType.BigEndianUnicode:
                WriteVerbose("Using Big Endian Unicode encoding.");
                enc = System.Text.Encoding.BigEndianUnicode;
                break;

            case EncodingType.Unicode:
                WriteVerbose("Using Unicode encoding.");
                enc = System.Text.Encoding.Unicode;
                break;

            case EncodingType.UTF32:
                WriteVerbose("Using UTF32 encoding.");
                enc = System.Text.Encoding.UTF32;
                break;

            case EncodingType.UTF7:
                WriteVerbose("Using UTF7 encoding.");
                enc = System.Text.Encoding.UTF7;
                break;

            case EncodingType.UTF8:
                WriteVerbose("Using UTF8 encoding.");
                enc = System.Text.Encoding.UTF8;
                break;

            case EncodingType.Default:
            default:
                enc = System.Text.Encoding.Default;
                WriteVerbose(string.Format("Using System's Default encoding. ({0})", enc.EncodingName));
                break;
            }

            JSchemaUrlResolverEvent resolver = new JSchemaUrlResolverEvent();

            resolver.SchemaResolving += Resolver_SchemaResolving;

            this._JsonFile = TransformPath(this._JsonFile);
            WriteVerbose("Reading JSON File.");
            string sJson = File.ReadAllText(this._JsonFile, enc);

            WriteVerbose("Parsing JSON File.");
            var json = JObject.Parse(sJson);

            string sSchema = string.Empty;

            if (this.SchemaInJsonFile)
            {
                WriteVerbose("Read schema file path from JSON file.");
                if (json["$schema"] == null || string.IsNullOrWhiteSpace(json["$schema"].Value <string>()))
                {
                    throw new PSInvalidOperationException("No $schema property defined in JSON file.");
                }

                this._SchemaFile = json["$schema"].Value <string>();
                WriteVerbose($"Found schema file path [{this._SchemaFile}] in JSON data file [{this._JsonFile}].");
            }

            this._SchemaFile = TransformPath(this._SchemaFile);
            WriteVerbose("Reading Schema File.");
            sSchema = File.ReadAllText(this._SchemaFile, enc);

            // load schema
            WriteVerbose("Parsing Schema File.");
            var schema = JSchema.Parse(sSchema, resolver);

            IList <ValidationError> errors = new List <ValidationError>();

            //if (this.ErrorAsObject) {
            //    errors = new List<ValidationError>();
            //} else {
            //    errors = new List<string>();
            //}

            // validate JSON
            WriteVerbose("Testing JSON file against schema.");
            var valid  =  SchemaExtensions.IsValid(json, schema,  out errors);

            // return error messages and line info
            WriteObject(new SchemaTestResult <ValidationError>()
            {
                Valid   =  valid,
                Errors  = valid ? null : errors
            });

            base.ProcessRecord();
        }