public void Example()
        {
            #region Usage
            JSchemaGenerator generator = new JSchemaGenerator();

            JSchema schema = generator.Generate(typeof(User));
            // {
            //   "type": "object",
            //   "properties": {
            //     "name": {
            //       "type": "string"
            //     },
            //     "role": {
            //       "type": [
            //         "string",
            //         "null"
            //       ]
            //     }
            //   },
            //   "required": [
            //     "name"
            //   ]
            // }
            #endregion

            Assert.AreEqual(JSchemaType.Object, schema.Type);
        }
        public void Example()
        {
            #region Usage
            JSchemaGenerator generator = new JSchemaGenerator();

            // types with no defined ID have their type name as the ID
            generator.SchemaIdGenerationHandling = SchemaIdGenerationHandling.TypeName;

            JSchema schema = generator.Generate(typeof(Person));
            // {
            //   "id": "Person",
            //   "type": "object",
            //   "properties": {
            //     "name": {
            //       "type": [ "string", "null" ]
            //     },
            //     "age": { "type": "integer" }
            //   },
            //   "required": [ "name", "age" ]
            // }
            #endregion

            Assert.AreEqual(JSchemaType.Object, schema.Type);
            Assert.AreEqual("Person", schema.Id.OriginalString);
        }
            private JSchema CreateSchemaWithFormat(Type type, Required required, string format)
            {
                JSchemaGenerator generator = new JSchemaGenerator();
                JSchema schema = generator.Generate(type, required != Required.Always);
                schema.Format = format;

                return schema;
            }
        public void Example()
        { 
            #region Usage
            JSchemaGenerator generator = new JSchemaGenerator();

            JSchema schema = generator.Generate(typeof(BuildingReport));
            // {
            //   "type": "object",
            //   "properties": {
            //     "Date": {
            //       "type": "string"
            //     },
            //     "Zone": {
            //       "type": "integer",
            //       "enum": [ 0, 1, 2 ]
            //     }
            //   },
            //   "required": [ "Date", "Zone" ]
            // }

            JSchemaGenerator stringEnumGenerator = new JSchemaGenerator();

            // change Zone enum to generate a string
            stringEnumGenerator.GenerationProviders.Add(new StringEnumGenerationProvider());

            JSchema stringEnumSchema = stringEnumGenerator.Generate(typeof(BuildingReport));
            // {
            //   "type": "object",
            //   "properties": {
            //     "Date": {
            //       "type": "string"
            //     },
            //     "Zone": {
            //       "type": "string",
            //       "enum": [ "Residential", "Commercial", "Industrial" ]
            //     }
            //   },
            //   "required": [ "Date", "Zone" ]
            // }
            #endregion

            Assert.AreEqual(JSchemaType.Integer, schema.Properties["Zone"].Type);
            Assert.AreEqual(JSchemaType.String, stringEnumSchema.Properties["Zone"].Type);
        }
        public void Example()
        {
            #region Usage
            JSchemaGenerator generator = new JSchemaGenerator();

            JSchema schema = generator.Generate(typeof(Person));
            // {
            //   "type": "object",
            //   "properties": {
            //     "Name": {
            //       "type": [ "string", "null" ]
            //     },
            //     "Age": { "type": "integer" }
            //   },
            //   "required": [ "Name", "Age" ]
            // }
            #endregion

            Assert.AreEqual(JSchemaType.Object, schema.Type);
        }
        public void Example()
        {
            #region Usage
            JSchemaGenerator generator = new JSchemaGenerator();
            generator.GenerationProviders.Add(new FormatSchemaProvider());

            JSchema schema = generator.Generate(typeof(User));
            // {
            //   "type": "object",
            //   "properties": {
            //     "Id": {
            //       "type": "integer",
            //       "format": "int32"
            //     },
            //     "Name": {
            //       "type": [
            //         "string",
            //         "null"
            //       ]
            //     },
            //     "CreatedDate": {
            //       "type": "string",
            //       "format": "date-time"
            //     }
            //   },
            //   "required": [
            //     "Id",
            //     "Name",
            //     "CreatedDate"
            //   ]
            // }
            #endregion

            Console.WriteLine(schema.ToString());

            Assert.AreEqual(JSchemaType.Integer, schema.Properties["Id"].Type);
            Assert.AreEqual("int32", schema.Properties["Id"].Format);
        }
        public void Example()
        {
            #region Usage
            JSchemaGenerator generator = new JSchemaGenerator();

            JSchema schema = generator.Generate(typeof(Building));
            // {
            //   "type": "object",
            //   "properties": {
            //     "Name": {
            //       "type": "string",
            //       "maxLength": 100
            //     },
            //     "PhoneNumber": {
            //       "type": "string",
            //       "format": "phone"
            //     },
            //     "Zone": {
            //       "type": "string",
            //       "enum": [
            //         "Residential",
            //         "Commercial",
            //         "Industrial"
            //       ]
            //     }
            //   },
            //   "required": [
            //     "Name",
            //     "PhoneNumber",
            //     "Zone"
            //   ]
            // }
            #endregion

            Assert.AreEqual(JSchemaType.Object, schema.Type);
        }
        public void Example()
        {
            #region Usage
            JSchemaGenerator generator = new JSchemaGenerator();

            // change contract resolver so property names are camel case
            generator.ContractResolver = new CamelCasePropertyNamesContractResolver();

            JSchema schema = generator.Generate(typeof(Person));
            // {
            //   "type": "object",
            //   "properties": {
            //     "name": {
            //       "type": [ "string", "null" ]
            //     },
            //     "age": { "type": "integer" }
            //   },
            //   "required": [ "name", "age" ]
            // }
            #endregion

            Assert.AreEqual(JSchemaType.Object, schema.Type);
            Assert.AreEqual(true, schema.Properties.ContainsKey("name"));
        }