Пример #1
0
        /// <summary>Deserializes a JSON string to a <see cref="JsonSchema4" />.</summary>
        /// <param name="data">The JSON string.</param>
        /// <param name="documentPath">The document path (URL or file path) for resolving relative document references.</param>
        /// <param name="referenceResolverFactory">The JSON reference resolver factory.</param>
        /// <returns>The JSON Schema.</returns>
        public static async Task <JsonSchema4> FromJsonAsync(string data, string documentPath, Func <JsonSchema4, JsonReferenceResolver> referenceResolverFactory)
        {
            data = JsonSchemaReferenceUtilities.ConvertJsonReferences(data);

            var settings = new JsonSerializerSettings
            {
                ContractResolver           = CreateJsonSerializerContractResolver(SchemaType.JsonSchema),
                MetadataPropertyHandling   = MetadataPropertyHandling.Ignore,
                ConstructorHandling        = ConstructorHandling.Default,
                ReferenceLoopHandling      = ReferenceLoopHandling.Serialize,
                PreserveReferencesHandling = PreserveReferencesHandling.Objects
            };

            JsonSchemaSerializationContext.CurrentSchemaType = SchemaType.JsonSchema;
            var schema = JsonConvert.DeserializeObject <JsonSchema4>(data, settings);

            schema.DocumentPath = documentPath;

            var referenceResolver = referenceResolverFactory(schema);

            if (!string.IsNullOrEmpty(documentPath))
            {
                referenceResolver.AddDocumentReference(documentPath, schema);
            }

            await JsonSchemaReferenceUtilities.UpdateSchemaReferencesAsync(schema, referenceResolver).ConfigureAwait(false);

            return(schema);
        }
Пример #2
0
        /// <summary>Serializes the <see cref="JsonSchema4" /> to a JSON string.</summary>
        /// <returns>The JSON string.</returns>
        public string ToJson()
        {
            var oldSchema = SchemaVersion;

            SchemaVersion = "http://json-schema.org/draft-04/schema#";
            JsonSchemaReferenceUtilities.UpdateSchemaReferencePaths(this, false);
            var json = JsonSchemaReferenceUtilities.ConvertPropertyReferences(JsonConvert.SerializeObject(this, Formatting.Indented));

            SchemaVersion = oldSchema;
            return(json);
        }
Пример #3
0
        /// <summary>Deserializes a JSON string to a <see cref="JsonSchema4"/>. </summary>
        /// <param name="data">The JSON string. </param>
        /// <returns></returns>
        public static JsonSchema4 FromJson(string data)
        {
            data = JsonSchemaReferenceUtilities.ConvertJsonReferences(data);
            var schema = JsonConvert.DeserializeObject <JsonSchema4>(data, new JsonSerializerSettings
            {
                ConstructorHandling        = ConstructorHandling.Default,
                ReferenceLoopHandling      = ReferenceLoopHandling.Serialize,
                PreserveReferencesHandling = PreserveReferencesHandling.Objects
            });

            JsonSchemaReferenceUtilities.UpdateSchemaReferences(schema);
            return(schema);
        }
Пример #4
0
        /// <summary>Serializes the <see cref="JsonSchema4" /> to a JSON string.</summary>
        /// <param name="typeNameGenerator">The type name generator.</param>
        /// <returns>The JSON string.</returns>
        public string ToJson(ITypeNameGenerator typeNameGenerator)
        {
            var oldSchema = SchemaVersion;

            SchemaVersion = "http://json-schema.org/draft-04/schema#";

            JsonSchemaReferenceUtilities.UpdateSchemaReferencePaths(this, new JsonSchemaDefinitionAppender(this, typeNameGenerator));
            var data = JsonConvert.SerializeObject(this, Formatting.Indented);

            JsonSchemaReferenceUtilities.UpdateSchemaReferences(this, new JsonReferenceResolver());

            SchemaVersion = oldSchema;
            return(JsonSchemaReferenceUtilities.ConvertPropertyReferences(data));
        }
Пример #5
0
        /// <summary>Serializes the <see cref="JsonSchema4" /> to a JSON string.</summary>
        /// <returns>The JSON string.</returns>
        public string ToJson()
        {
            var oldSchema = SchemaVersion;

            SchemaVersion = "http://json-schema.org/draft-04/schema#";

            var contractResolver = CreateJsonSerializerContractResolver(SchemaType.JsonSchema);

            JsonSchemaSerializationContext.CurrentSchemaType = SchemaType.JsonSchema;
            JsonSchemaReferenceUtilities.UpdateSchemaReferencePaths(this, false, contractResolver);
            var json = JsonConvert.SerializeObject(this, Formatting.Indented, new JsonSerializerSettings
            {
                ContractResolver = contractResolver
            });

            SchemaVersion = oldSchema;
            return(JsonSchemaReferenceUtilities.ConvertPropertyReferences(json));
        }
Пример #6
0
        /// <summary>Deserializes a JSON string to a <see cref="JsonSchema4"/>. </summary>
        /// <param name="data">The JSON string. </param>
        /// <param name="documentPath">The document path (URL or file path) for resolving relative document references.</param>
        /// <param name="jsonReferenceResolver">The JSON document resolver.</param>
        /// <returns>The JSON Schema.</returns>
        public static JsonSchema4 FromJson(string data, string documentPath, JsonReferenceResolver jsonReferenceResolver)
        {
            data = JsonSchemaReferenceUtilities.ConvertJsonReferences(data);
            var schema = JsonConvert.DeserializeObject <JsonSchema4>(data, new JsonSerializerSettings
            {
                ConstructorHandling        = ConstructorHandling.Default,
                ReferenceLoopHandling      = ReferenceLoopHandling.Serialize,
                PreserveReferencesHandling = PreserveReferencesHandling.Objects
            });

            schema.DocumentPath = documentPath;

            if (jsonReferenceResolver != null && !string.IsNullOrEmpty(documentPath))
            {
                jsonReferenceResolver.AddDocumentReference(documentPath, schema);
            }

            JsonSchemaReferenceUtilities.UpdateSchemaReferences(schema, jsonReferenceResolver);
            return(schema);
        }
Пример #7
0
        /// <summary>Deserializes a JSON string to a <see cref="JsonSchema4" />.</summary>
        /// <param name="data">The JSON string.</param>
        /// <param name="documentPath">The document path (URL or file path) for resolving relative document references.</param>
        /// <param name="referenceResolverFactory">The JSON reference resolver factory.</param>
        /// <returns>The JSON Schema.</returns>
        public static async Task <JsonSchema4> FromJsonAsync(string data, string documentPath, Func <JsonSchema4, JsonReferenceResolver> referenceResolverFactory)
        {
            data = JsonSchemaReferenceUtilities.ConvertJsonReferences(data);
            var schema = JsonConvert.DeserializeObject <JsonSchema4>(data, new JsonSerializerSettings
            {
                ConstructorHandling        = ConstructorHandling.Default,
                ReferenceLoopHandling      = ReferenceLoopHandling.Serialize,
                PreserveReferencesHandling = PreserveReferencesHandling.Objects
            });

            schema.DocumentPath = documentPath;

            var referenceResolver = referenceResolverFactory(schema);

            if (!string.IsNullOrEmpty(documentPath))
            {
                referenceResolver.AddDocumentReference(documentPath, schema);
            }

            await JsonSchemaReferenceUtilities.UpdateSchemaReferencesAsync(schema, referenceResolver).ConfigureAwait(false);

            return(schema);
        }