private static MODEL _Read(TextReader textReader, ReadSettings settings) { Guard.NotNull(textReader, nameof(textReader)); Guard.NotNull(settings, nameof(settings)); using (var reader = new JsonTextReader(textReader)) { var root = new MODEL(); reader.Read(); root.Deserialize(reader); var ex = root.Validate().FirstOrDefault(); if (ex != null) { throw ex; } foreach (var buffer in root._buffers) { buffer._ResolveUri(settings.FileReader); } foreach (var image in root._images) { image._ResolveUri(settings.FileReader); } return(root); } }
private static (MODEL Model, Validation.ValidationResult Validation) _Read(TextReader textReader, ReadSettings settings) { Guard.NotNull(textReader, nameof(textReader)); Guard.NotNull(settings, nameof(settings)); using (var reader = new JsonTextReader(textReader)) { var root = new MODEL(); var vcontext = new Validation.ValidationResult(root); if (!reader.Read()) { vcontext.AddError(new Validation.ModelException(root, "Json is empty")); return(null, vcontext); } try { root.Deserialize(reader); } catch (JsonReaderException rex) { vcontext.AddError(new Validation.SchemaException(root, rex)); return(null, vcontext); } // schema validation root.ValidateReferences(vcontext.GetContext(root)); var ex = vcontext.Errors.FirstOrDefault(); if (ex != null) { return(null, vcontext); } // resolve external references foreach (var buffer in root._buffers) { buffer._ResolveUri(settings.FileReader); } foreach (var image in root._images) { image._ResolveUri(settings.FileReader); } // full validation if (!settings.SkipValidation) { root.Validate(vcontext.GetContext(root)); ex = vcontext.Errors.FirstOrDefault(); if (ex != null) { return(null, vcontext); } } return(root, vcontext); } }