コード例 #1
0
        public async Task WithJsonSerializerSettingsSerDe()
        {
            const int value        = 1234;
            var       expectedJson = $"{{\"Value\":{value * 2}}}";
            var       jsonSchemaGeneratorSettings = new JsonSchemaGeneratorSettings
            {
                SerializerSettings = new JsonSerializerSettings
                {
                    Converters = new List <JsonConverter>
                    {
                        new UInt32ValueMultiplyConverter()
                    },
                    ContractResolver = new DefaultContractResolver()
                }
            };

            var jsonSerializer   = new JsonSerializer <UInt32Value>(schemaRegistryClient, jsonSchemaGeneratorSettings: jsonSchemaGeneratorSettings);
            var jsonDeserializer = new JsonDeserializer <UInt32Value>(jsonSchemaGeneratorSettings: jsonSchemaGeneratorSettings);

            var v = new UInt32Value {
                Value = value
            };
            var bytes = await jsonSerializer.SerializeAsync(v, new SerializationContext(MessageComponentType.Value, testTopic));

            Assert.NotNull(bytes);
            Assert.Equal(expectedJson, Encoding.UTF8.GetString(bytes.AsSpan().Slice(5)));

            var actual = await jsonDeserializer.DeserializeAsync(bytes, false, new SerializationContext(MessageComponentType.Value, testTopic));

            Assert.NotNull(actual);
            Assert.Equal(v.Value, actual.Value);
        }
コード例 #2
0
ファイル: EnumTests.cs プロジェクト: Dreamescaper/NJsonSchema
        public async Task When_SerializerSettings_has_CamelCase_StringEnumConverter_then_enum_values_are_correct()
        {
            // Arrange
            var settings = new JsonSchemaGeneratorSettings
            {
                SerializerSettings = new JsonSerializerSettings
                {
                    Converters =
                    {
                        new StringEnumConverter {
                            CamelCaseText = true
                        }
                    }
                }
            };

            // Act
            var schema = await JsonSchema4.FromTypeAsync <MyEnum>(settings);

            var json = schema.ToJson();

            // Assert
            Assert.Equal("value1", schema.Enumeration.First());
            Assert.Equal("value2", schema.Enumeration.Last());

            Assert.Equal("Value1", schema.EnumerationNames.First());
            Assert.Equal("Value2", schema.EnumerationNames.Last());
        }
コード例 #3
0
ファイル: TypesToSwaggerTests.cs プロジェクト: zwq00000/NSwag
        public void When_generating_multiple_types_then_they_are_appended_to_the_definitions()
        {
            //// Arrange
            var classNames = new[]
            {
                "NSwag.Generation.WebApi.Tests.B",
                "NSwag.Generation.WebApi.Tests.C"
            };

            //// Act
            var document       = new OpenApiDocument();
            var settings       = new JsonSchemaGeneratorSettings();
            var schemaResolver = new OpenApiSchemaResolver(document, settings);
            var generator      = new JsonSchemaGenerator(settings);

            foreach (var className in classNames)
            {
                var type = typeof(TypesToSwaggerTests).Assembly.GetType(className);
                generator.Generate(type, schemaResolver);
            }
            var json = document.ToJson();

            //// Assert
            Assert.IsNotNull(json);
            Assert.AreEqual(2, document.Definitions.Count);
        }
コード例 #4
0
        public async Task <IActionResult> GetContractsAsync()
        {
            var fetchFrom = new[]
            {
                typeof(Client),
                typeof(IdentityResource),
                typeof(ApiResource)
            };

            //var generator = new JSchemaGenerator {ContractResolver = new CamelCasePropertyNamesContractResolver()};
            var schemas           = new Dictionary <string, object>();
            var generatorSettings = new JsonSchemaGeneratorSettings();

            generatorSettings.SerializerSettings                  = new JsonSerializerSettings();
            generatorSettings.FlattenInheritanceHierarchy         = true;
            generatorSettings.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
            //generatorSettings.SerializerSettings.PreserveReferencesHandling =
            //    PreserveReferencesHandling.All;
            foreach (var type in fetchFrom)
            {
                var schema = await JsonSchema4.FromTypeAsync(type, generatorSettings);

                schemas.Add(ToLowerFirstLetter(type.Name), JsonConvert.DeserializeObject(schema.ToJson()));
            }

            return(Ok(schemas));
        }
コード例 #5
0
ファイル: JsonSchemaHandler.cs プロジェクト: Davidblkx/MOP
        public JsonSchemaHandler()
        {
            var settings = new JsonSchemaGeneratorSettings {
            };

            _schemaGenerator = new JsonSchemaGenerator(settings);
        }
コード例 #6
0
    /// <summary>
    /// Initializes a new instance of the <see cref="CustomResourceDefinitionGenerator"/> class.
    /// </summary>
    /// <param name="client">The client.</param>
    public CustomResourceDefinitionGenerator()
    {
        _jsonSchemaGeneratorSettings = new JsonSchemaGeneratorSettings()
        {
            SchemaType  = SchemaType.OpenApi3,
            TypeMappers =
            {
                new ObjectTypeMapper(
                    typeof(V1ObjectMeta),
                    new JsonSchema
                {
                    Type = JsonObjectType.Object,
                }),
            },
        };

        _serializerSettings = new JsonSerializerSettings
        {
            Formatting            = Formatting.None,
            DateFormatHandling    = DateFormatHandling.IsoDateFormat,
            DateTimeZoneHandling  = DateTimeZoneHandling.Utc,
            NullValueHandling     = NullValueHandling.Ignore,
            ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
            ContractResolver      = new ReadOnlyJsonContractResolver(),
            Converters            = new List <JsonConverter>
            {
                new Iso8601TimeSpanConverter(),
            },
        };
    }
コード例 #7
0
        private static JsonSchema GenerateJsonSchema(Type type, JsonSchemaGeneratorSettings generatorSettings)
        {
            var jsonSchema4 = JsonSchema.FromType(type, generatorSettings);

            jsonSchema4.Id = type.Name;
            return(jsonSchema4);
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: PraneethMadush/Ncrement
        private static void Main(string[] args)
        {
            string schemaFile = Path.Combine(Path.GetDirectoryName(typeof(Program).Assembly.Location), $"{nameof(Ncrement)}-schema.json".ToLowerInvariant());

            if (args.Length > 0 && string.IsNullOrEmpty(args[0]) == false)
            {
                schemaFile = args[0];
            }

            string folder = Path.GetDirectoryName(schemaFile);

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }

            var settings = new JsonSchemaGeneratorSettings()
            {
                ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver()
                {
                    NamingStrategy = new Newtonsoft.Json.Serialization.CamelCaseNamingStrategy()
                }
            };
            var generator = new JsonSchemaGenerator(settings);
            var schema    = generator.Generate(typeof(Manifest));

            File.WriteAllText(schemaFile, schema.ToJson());
        }
コード例 #9
0
        public JsonHelper()
        {
            jsonSerializerSettings = new JsonSerializerSettings
            {
                ContractResolver = new CamelCaseExceptDictionaryKeysResolver()
            };

            jsonSerializerSettings.Formatting = Formatting.Indented;

            jsonSchemaGeneratorSettings = new JsonSchemaGeneratorSettings
            {
                FlattenInheritanceHierarchy = true,
                SchemaType          = SchemaType.JsonSchema,
                SchemaNameGenerator = new DefaultSchemaNameGenerator(),
                SerializerSettings  = jsonSerializerSettings
            };

            jsonSchemaGeneratorSettings.SchemaProcessors.Add(new InheritanceProcessor());
            jsonSchemaGeneratorSettings.SchemaProcessors.Add(new GuidFixProcessor());

            jsonSchemaGeneratorSettings.TypeMappers.Add(
                new PrimitiveTypeMapper(typeof(DynamicData), schema =>
            {
                schema.Type = JsonObjectType.Object;

                schema.AdditionalPropertiesSchema = new JsonSchema
                {
                    Description = "Any"
                };
            }));

            jsonSerializer = JsonSerializer.Create(jsonSerializerSettings);
        }
コード例 #10
0
        public async Task When_discriminator_is_externally_defined_then_it_is_generated()
        {
            //// Arrange
            var settings = new JsonSchemaGeneratorSettings
            {
                SchemaProcessors =
                {
                    new DiscriminatorSchemaProcessor(typeof(CommonThingBase), "discriminator")
                }
            };

            //// Act
            var schema = await JsonSchema4.FromTypeAsync <ViewModelThing>(settings);

            var data = schema.ToJson();

            //// Assert
            Assert.True(schema.Definitions.ContainsKey(nameof(CommonThingBase)));
            Assert.True(schema.Definitions.ContainsKey(nameof(ACommonThing)));
            Assert.True(schema.Definitions.ContainsKey(nameof(BCommonThing)));

            var baseSchema = schema.Definitions[nameof(CommonThingBase)];

            Assert.Equal("discriminator", baseSchema.Discriminator);
        }
コード例 #11
0
        private AspNetCoreOperationProcessorContext GetContext(ApiDescription apiDescription)
        {
            var operationDescription = new SwaggerOperationDescription {
                Operation = new SwaggerOperation()
            };
            var swaggerSettings         = new AspNetCoreToSwaggerGeneratorSettings();
            var document                = new SwaggerDocument();
            var generator               = new AspNetCoreToSwaggerGenerator(swaggerSettings);
            var schemaGeneratorSettings = new JsonSchemaGeneratorSettings();
            var schemaGenerator         = new JsonSchemaGenerator(schemaGeneratorSettings);
            var schemaResolver          = new SwaggerSchemaResolver(document, schemaGeneratorSettings);
            var context = new AspNetCoreOperationProcessorContext(
                document,
                operationDescription,
                GetType(),
                GetType().GetMethod(nameof(SomeAction), BindingFlags.NonPublic | BindingFlags.Instance),
                new SwaggerGenerator(schemaGenerator, schemaGeneratorSettings, schemaResolver),
                schemaGenerator,
                schemaResolver,
                swaggerSettings,
                new List <SwaggerOperationDescription>())
            {
                ApiDescription = apiDescription,
            };

            return(context);
        }
コード例 #12
0
ファイル: OpenApiServices.cs プロジェクト: seamys/squidex
        private static void ConfigureSchemaSettings(JsonSchemaGeneratorSettings settings, bool flatten = false)
        {
            settings.AllowReferencesWithProperties = true;

            settings.ReflectionService = new ReflectionServices();

            settings.TypeMappers = new List <ITypeMapper>
            {
                CreateStringMap <DomainId>(),
                CreateStringMap <Instant>(JsonFormatStrings.DateTime),
                CreateStringMap <LocalDate>(JsonFormatStrings.Date),
                CreateStringMap <LocalDateTime>(JsonFormatStrings.DateTime),
                CreateStringMap <Language>(),
                CreateStringMap <NamedId <DomainId> >(),
                CreateStringMap <NamedId <Guid> >(),
                CreateStringMap <NamedId <string> >(),
                CreateStringMap <RefToken>(),
                CreateStringMap <Status>(),

                CreateObjectMap <JsonObject>(),
                CreateObjectMap <AssetMetadata>()
            };

            settings.SchemaType = SchemaType.OpenApi3;

            settings.FlattenInheritanceHierarchy = flatten;
        }
コード例 #13
0
        public static OpenApiDocument GetOpenApiDocument(JsonSchemaGeneratorSettings settings, params string[] assemblyDllPaths)
        {
            string currentDirectory = DynamicApis.DirectoryGetCurrentDirectory();

            Assembly[] assemblies = PathUtilities.ExpandFileWildcards(assemblyDllPaths)
                                    .Select(path => Assembly.LoadFrom(PathUtilities.MakeAbsolutePath(path, currentDirectory))).ToArray();
            return(GetOpenApiDocument(settings, assemblies));
        }
コード例 #14
0
 /// <summary>Initializes a new instance of the <see cref="SwaggerGenerator"/> class.</summary>
 /// <param name="schemaGenerator">The schema generator.</param>
 /// <param name="schemaGeneratorSettings">The schema generator settings.</param>
 /// <param name="schemaResolver">The schema resolver.</param>
 /// <param name="schemaDefinitionAppender">The schema definition appender.</param>
 public SwaggerGenerator(JsonSchemaGenerator schemaGenerator, JsonSchemaGeneratorSettings schemaGeneratorSettings, 
     ISchemaResolver schemaResolver, ISchemaDefinitionAppender schemaDefinitionAppender)
 {
     _schemaGenerator = schemaGenerator;
     _schemaResolver = schemaResolver;
     _schemaDefinitionAppender = schemaDefinitionAppender;
     _settings = schemaGeneratorSettings;
 }
 public EndpointDocJsonSchemaGenerator(JsonSchemaGeneratorSettings settings, IValueProviderResolver valueProviders, ISchemaCustomizerResolver schemaCustomizers, IAutoTitleGenerator titleGenerator)
     : base(settings)
 {
     this.settings          = settings;
     this.valueProviders    = valueProviders;
     this.schemaCustomizers = schemaCustomizers;
     this.titleGenerator    = titleGenerator;
 }
コード例 #16
0
ファイル: HttpTestHelpers.cs プロジェクト: ukodiak/api
        public Task <JsonSchema4> GetJsonSchemaFromType <T>()
        {
            var settings = new JsonSchemaGeneratorSettings {
                DefaultPropertyNameHandling = PropertyNameHandling.CamelCase, FlattenInheritanceHierarchy = true
            };

            return(JsonSchema4.FromTypeAsync <T>(settings));
        }
コード例 #17
0
        public static List <OpenApiDocument> GetOpenApiDocumentSepareted(JsonSchemaGeneratorSettings settings, params Assembly[] assemblies)
        {
            List <string> allExportedClassNames =
                assemblies.SelectMany(a => a.ExportedTypes)
                .Select(t => t.FullName).ToList();

            return(GetOpenApiDocumentSepareted(settings, assemblies, allExportedClassNames));
        }
コード例 #18
0
        public void Given_Settings_When_Instantiated_Then_It_Should_Return_Values()
        {
            var settings = new JsonSchemaGeneratorSettings();
            var instance = new SchemaBuilder(settings);

            instance.Settings
            .Should().NotBeNull()
            .And.Be(settings);
        }
コード例 #19
0
        public InheritanceValidator(
            JArray objects,
            JsonSchemaGeneratorSettings settings)
        {
            Settings = settings;
            Objects  = objects;

            SetupSchemas();
        }
コード例 #20
0
ファイル: Startup.cs プロジェクト: threax/EdityMcEditface
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.TryAddScoped <IGitCredentialsProvider, WindowsGitCredentialsProvider>();
            services.AddEdity(o =>
            {
                Configuration.Bind("EditySettings", o);

                o.Events.CustomizeBuildTasks = buildTasks =>
                {
                    buildTasks.SetBuildTaskBuilder("PublishToGitRepo", s => new PublishToGitRepo(s, new WindowsGitCredentialsProvider()));
                };

                o.Events.CustomizeTools = tools =>
                {
                    tools
                    .AddTool("updateConfigSchema", new ToolCommand("Update the schema file for this application's configuration.", async a =>
                    {
                        var json = await Configuration.CreateSchema();
                        File.WriteAllText("appsettings.schema.json", json);
                    }))
                    .AddTool("updateEditySchema", new ToolCommand("Update the schema for edity.json in the manual.", async a =>
                    {
                        var settings = new JsonSchemaGeneratorSettings()
                        {
                            FlattenInheritanceHierarchy = true,
                            DefaultPropertyNameHandling = PropertyNameHandling.CamelCase,
                            DefaultEnumHandling         = EnumHandling.String,
                        };
                        var generator = new JsonSchemaGenerator(settings);
                        var schema    = await generator.GenerateAsync(typeof(EdityProject));

                        File.WriteAllText("../Manual/edityschema.json", schema.ToJson());
                    }))
                    .AddTool("clone", new ToolCommand("Clone a git repo.", a => RepoTools.Clone(a, o)));

                    if (o.ProjectMode == ProjectMode.OneRepoPerUser)
                    {
                        tools.AddTool("pushmaster", new ToolCommand("Push a one repo per user shared repo to an origin. Only works in OneRepoPerUser mode.", a => RepoTools.PushMaster(a, o)));
                    }
                };
            });

            services.AddAuthentication(AuthCoreSchemes.Bearer)
            .AddCookie(AuthCoreSchemes.Bearer, o =>
            {
                o.LoginPath  = "/edity/auth/login";
                o.LogoutPath = "/edity/auth/logout";
            });

            services.AddLogging(o =>
            {
                o.AddConfiguration(Configuration.GetSection("Logging"))
                .AddConsole()
                .AddDebug();
            });
        }
コード例 #21
0
            /// <summary>Initializes a new instance of the <see cref="OpenApiDocumentSchemaResolver" /> class.</summary>
            /// <param name="document">The Open API document.</param>
            /// <param name="settings">The settings.</param>
            public OpenApiDocumentSchemaResolver(OpenApiDocument document, JsonSchemaGeneratorSettings settings)
                : base(document, settings)
            {
                if (document == null)
                {
                    throw new ArgumentNullException(nameof(document));
                }

                this._typeNameGenerator = settings.TypeNameGenerator;
            }
コード例 #22
0
        /// <summary>Initializes a new instance of the <see cref="SwaggerSchemaResolver" /> class.</summary>
        /// <param name="document">The Swagger document.</param>
        /// <param name="settings">The settings.</param>
        /// <exception cref="ArgumentNullException"><paramref name="document" /> is <see langword="null" /></exception>
        public SwaggerSchemaResolver(SwaggerDocument document, JsonSchemaGeneratorSettings settings)
            : base(document, settings)
        {
            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            _typeNameGenerator = settings.TypeNameGenerator;
        }
コード例 #23
0
        public void Given_Default_When_Build_Invoked_Then_It_Should_Throw_Exception()
        {
            var settings = new JsonSchemaGeneratorSettings();

            Action action = () => new SchemaBuilder()
                            .WithSettings(settings)
                            .Build(default(Type));

            action.Should().Throw <ArgumentNullException>();
        }
コード例 #24
0
        private static void AddActionScript(StringBuilder script, ModuleApiDescriptionModel module, ControllerApiDescriptionModel controller, ActionApiDescriptionModel action)
        {
            script.AppendLine($"    // action '{action.Name.ToCamelCase()}'");
            var settings = new JsonSchemaGeneratorSettings();

            settings.FlattenInheritanceHierarchy      = true;
            settings.DefaultPropertyNameHandling      = NJsonSchema.PropertyNameHandling.CamelCase;
            settings.DefaultReferenceTypeNullHandling = NJsonSchema.ReferenceTypeNullHandling.NotNull;

            var generator = new JsonSchemaGenerator(settings);

            script.AppendLine($"    abp.schemas.{module.Name.ToCamelCase()}.{controller.Name.ToCamelCase()}.{action.Name.ToCamelCase()} = abp.schemas.{module.Name.ToCamelCase()}.{controller.Name.ToCamelCase()}.{action.Name.ToCamelCase()} || {{}};");
            var type = action.ReturnValue.Type;

            if (type != typeof(Task))
            {
                if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Task <>))
                {
                    type = type.GetGenericArguments()[0]; // use this...
                }


                //var schema = await generator.GenerateAsync<JsonSchema4>(typeof(Person));

                var schema     = generator.GenerateAsync(type).GetAwaiter().GetResult();
                var schemaData = schema.ToJson();

                //var js = new Newtonsoft.Json.Schema.Generation.JSchemaGenerator();
                //var schema = js.Generate(action.ReturnValue.Type);
                //schema.Title = action.ReturnValue.Type.Name;
                script.Append($"    abp.schemas.{module.Name.ToCamelCase()}.{controller.Name.ToCamelCase()}.{action.Name.ToCamelCase()}.returnValue =  ");
                script.AppendLine(schemaData);
            }
            foreach (var parameter in action.Parameters)
            {
                type = parameter.Type;
                var schema     = generator.GenerateAsync(type).GetAwaiter().GetResult();
                var schemaData = schema.ToJson();

                script.Append($"    abp.schemas.{module.Name.ToCamelCase()}.{controller.Name.ToCamelCase()}.{action.Name.ToCamelCase()}.{parameter.Name.ToCamelCase()} =  ");
                script.AppendLine(schemaData);
            }


            //var parameterList = ProxyScriptingJsFuncHelper.GenerateJsFuncParameterList(action, "ajaxParams");

            //script.AppendLine($"    // action '{action.Name.ToCamelCase()}'");
            //script.AppendLine($"    abp.schemas.{module.Name.ToCamelCase()}.{controller.Name.ToCamelCase()}{ProxyScriptingJsFuncHelper.WrapWithBracketsOrWithDotPrefix(action.Name.ToCamelCase())} = function({parameterList}) {{");
            //script.AppendLine("      return abp.ajax($.extend(true, {");

            //AddAjaxCallParameters(script, controller, action);

            //script.AppendLine("      }, ajaxParams));;");
            //script.AppendLine("    };");
        }
コード例 #25
0
        private static JObject Generate <T>()
        {
            JsonSchemaGeneratorSettings settings = new JsonSchemaGeneratorSettings();

            settings.SchemaType         = SchemaType.OpenApi3;
            settings.GenerateKnownTypes = true;

            JsonSchema schema = JsonSchema.FromType <T>();

            return(JObject.Parse(schema.ToJson()));
        }
コード例 #26
0
        public static async Task <JsonSchema4> CreateSchema()
        {
            JsonSchemaGeneratorSettings settings = new JsonSchemaGeneratorSettings()
            {
                GenerateAbstractProperties    = true,
                AllowReferencesWithProperties = true
            };
            var gen = new SimpleSchemaGenerator(settings);

            return(await gen.GenerateAsync(typeof(SectionBuilder)));
        }
コード例 #27
0
        public void Given_Type_When_Build_Invoked_Then_It_Should_Return_Values()
        {
            var settings = new JsonSchemaGeneratorSettings();
            var result   = new SchemaBuilder()
                           .WithSettings(settings)
                           .Build(typeof(FakeClass));

            var schema = JObject.Parse(result.ToJson());

            schema["properties"].As <JObject>()
            .Should().ContainKey("FakeMessage");
        }
コード例 #28
0
            public GenerationContext(JsonSchema rootSchema)
            {
                Schema = rootSchema;

                _settings = new JsonSchemaGeneratorSettings();
                _settings.SerializerSettings = new JsonSerializerSettings();
                _settings.SerializerSettings.Converters.Add(new StringEnumConverter());

                _resolver = new JsonSchemaResolver(rootSchema, _settings);

                _generator = new JsonSchemaGenerator(_settings);
            }
コード例 #29
0
        public JsonSchemaProxyScriptGenerator()
        {
            Logger = NullLogger.Instance;
            var settings = new JsonSchemaGeneratorSettings();

            settings.FlattenInheritanceHierarchy      = true;
            settings.DefaultPropertyNameHandling      = NJsonSchema.PropertyNameHandling.CamelCase;
            settings.DefaultReferenceTypeNullHandling = NJsonSchema.ReferenceTypeNullHandling.NotNull;
            settings.AllowReferencesWithProperties    = false;
            settings.SchemaType = NJsonSchema.SchemaType.JsonSchema;
            generator           = new JsonSchemaGenerator(settings);
        }
コード例 #30
0
 static SchemaCache()
 {
     _settings = new JsonSchemaGeneratorSettings()
     {
         SchemaType = SchemaType.OpenApi3,
         FlattenInheritanceHierarchy = true,
         // DefaultEnumHandling = EnumHandling.String,
         TypeNameGenerator             = new TypeNameGenerator(),
         SchemaNameGenerator           = new TypeNameGenerator(),
         AllowReferencesWithProperties = true,
         IgnoreObsoleteProperties      = false,
     };
 }
コード例 #31
0
        public void When_FlattenInheritanceHierarchy_is_enabled_then_all_properties_are_in_one_schema()
        {
            //// Arrange
            var settings = new JsonSchemaGeneratorSettings
            {
                DefaultEnumHandling = EnumHandling.String,
                FlattenInheritanceHierarchy = true
            };

            //// Act
            var schema = JsonSchema4.FromType(typeof(Teacher), settings);
            var data = schema.ToJson();

            //// Assert
            Assert.IsTrue(schema.Properties.ContainsKey("Name"));
            Assert.IsTrue(schema.Properties.ContainsKey("Class"));
        }