From 6f9e899cfe46e8d99a12e42e378e7c03693dd1c2 Mon Sep 17 00:00:00 2001 From: domaindrivendev Date: Thu, 16 May 2019 14:04:03 +0100 Subject: [PATCH] Handle JArray's correctly --- .../SchemaGen/SchemaGenerator.cs | 2 +- .../SchemaGen/TypeSpecificSchemaGenerator.cs | 7 ++++--- .../SchemaGen/SchemaGeneratorTests.cs | 13 ++++++++----- .../Basic/Controllers/DynamicTypesController.cs | 6 ++++++ 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGen/SchemaGenerator.cs b/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGen/SchemaGenerator.cs index 0df7e3af5..bcbc539da 100644 --- a/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGen/SchemaGenerator.cs +++ b/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGen/SchemaGenerator.cs @@ -85,7 +85,7 @@ public OpenApiSchema GenerateSchema(Type type, SchemaRepository schemaRepository if (Next != null) return Next.GenerateSchema(type, schemaRepository); - throw new InvalidOperationException("TODO:"); + throw new InvalidOperationException($"Unable to generate schema for type - {type}"); } protected IContractResolver ContractResolver { get; } diff --git a/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGen/TypeSpecificSchemaGenerator.cs b/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGen/TypeSpecificSchemaGenerator.cs index f6a08f042..da04f9bb7 100644 --- a/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGen/TypeSpecificSchemaGenerator.cs +++ b/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGen/TypeSpecificSchemaGenerator.cs @@ -29,9 +29,10 @@ protected override OpenApiSchema GenerateSchemaFor(Type type, SchemaRepository s private static Dictionary> KnownTypeMappings = new Dictionary> { - { typeof(object), () => new OpenApiSchema { Type = "object" } }, - { typeof(JToken), () => new OpenApiSchema { Type = "object" } }, - { typeof(JObject), () => new OpenApiSchema { Type = "object" } } + [ typeof(object) ] = () => new OpenApiSchema { Type = "object" }, + [ typeof(JToken) ] = () => new OpenApiSchema { Type = "object" }, + [ typeof(JObject) ] = () => new OpenApiSchema { Type = "object" }, + [ typeof(JArray) ] = () => new OpenApiSchema { Type = "array", Items = new OpenApiSchema { Type = "object" } } }; } } diff --git a/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SchemaGen/SchemaGeneratorTests.cs b/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SchemaGen/SchemaGeneratorTests.cs index 18e462e75..8bcc70d3b 100644 --- a/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SchemaGen/SchemaGeneratorTests.cs +++ b/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SchemaGen/SchemaGeneratorTests.cs @@ -16,14 +16,17 @@ namespace Swashbuckle.AspNetCore.SwaggerGen.Test public class SchemaGeneratorTests { [Theory] - [InlineData(typeof(object))] - [InlineData(typeof(JToken))] - [InlineData(typeof(JObject))] - public void GenerateSchema_GeneratesDynamicSchema_IfDynamicType(Type type) + [InlineData(typeof(object), "object")] + [InlineData(typeof(JToken), "object")] + [InlineData(typeof(JObject), "object")] + [InlineData(typeof(JArray), "array")] + public void GenerateSchema_GeneratesDynamicSchema_IfDynamicType( + Type type, + string expectedType) { var schema = Subject().GenerateSchema(type, new SchemaRepository()); - Assert.Equal("object", schema.Type); + Assert.Equal(expectedType, schema.Type); Assert.Empty(schema.Properties); } diff --git a/test/WebSites/Basic/Controllers/DynamicTypesController.cs b/test/WebSites/Basic/Controllers/DynamicTypesController.cs index f4de8ea15..65a2ed2a7 100644 --- a/test/WebSites/Basic/Controllers/DynamicTypesController.cs +++ b/test/WebSites/Basic/Controllers/DynamicTypesController.cs @@ -35,5 +35,11 @@ public IEnumerable GetWizards() new JObject() }; } + + [HttpGet("witches")] + public JArray GetWitches() + { + return JArray.FromObject(new[] { "foo", "bar" }); + } } } \ No newline at end of file