Skip to content

Commit 7947d48

Browse files
committed
apply pr suggestions
1 parent 27c7842 commit 7947d48

File tree

6 files changed

+29
-41
lines changed

6 files changed

+29
-41
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,14 +114,15 @@ In versions of Swashbuckle.AspNetCore prior to `5.0.0`, Swashbuckle would genera
114114
on the behavior of the [Newtonsoft.Json serializer][newtonsoft-json]. This made sense because that was the serializer that shipped with ASP.NET Core
115115
at the time. However, since ASP.NET Core 3.0, ASP.NET Core introduces a new serializer, [System.Text.Json (STJ)][system-text-json] out-of-the-box.
116116

117-
If you find that the *STJ* options/attributes are not being honored, this may be because you are using a combination of minimal apis and mvc which have separate json options.
118-
To force the swagger generation to use either set of json options you can use one of the following methods.
117+
If you find that the *STJ* options/attributes are not being honored, this may be because you are using a combination of Minimal APIs and MVC, which have separate JSON options.
118+
To force the OpenAPI document generation to use either set of JSON options you can use one of the following methods:
119119

120120
```csharp
121121
services.AddSwaggerGen(c =>
122122
{
123123
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
124124
});
125+
// Then either:
125126
services.AddSwaggerGenMinimalApisJsonOptions();
126127
// or ...
127128
services.AddSwaggerGenMvcJsonOptions();

src/Swashbuckle.AspNetCore.SwaggerGen/DependencyInjection/ConfigureSwaggerGenJsonOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public void PostConfigure(string name, SwaggerGenJsonOptions options)
3131
return;
3232
}
3333

34+
#if NET
3435
/*
3536
* There is no surefire way to do this.
3637
* However, both JsonOptions are defaulted in the same way.
@@ -43,7 +44,6 @@ public void PostConfigure(string name, SwaggerGenJsonOptions options)
4344
* a last resort as this is an expensive operation.
4445
*/
4546

46-
#if NET
4747
var serializerOptions = _mvcJsonOptions.JsonSerializerOptions ?? JsonSerializerOptions.Default;
4848

4949
if (_minimalApiConfigureOptions.Any() || _minimalApiPostConfigureOptions.Any())

src/Swashbuckle.AspNetCore.SwaggerGen/DependencyInjection/SwaggerGenJsonOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace Swashbuckle.AspNetCore.SwaggerGen.DependencyInjection;
88
public class SwaggerGenJsonOptions
99
{
1010
/// <summary>
11-
/// Gets or Sets the json serializer options used by <see cref="JsonSerializerDataContractResolver"/>.
11+
/// Gets or sets the JSON serializer options to use.
1212
/// </summary>
1313
public JsonSerializerOptions SerializerOptions { get; set; }
1414
}

test/Swashbuckle.AspNetCore.SwaggerGen.Test/SwaggerGenJsonOptionsTests.cs

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
using Swashbuckle.AspNetCore.SwaggerGen.DependencyInjection;
77
using Swashbuckle.AspNetCore.SwaggerGen.Test.Fixtures;
88

9+
using MinimalApiJsonOptions = Microsoft.AspNetCore.Http.Json.JsonOptions;
10+
using MvcJsonOptions = Microsoft.AspNetCore.Mvc.JsonOptions;
11+
912
namespace Swashbuckle.AspNetCore.SwaggerGen.Test;
1013

1114
public class SwaggerGenJsonOptionsTests
@@ -16,80 +19,60 @@ public static void Ensure_SwaggerGenJsonOptions_Uses_MinimalApi_JsonOptions_When
1619
var services = new ServiceCollection();
1720
services.AddSingleton<IWebHostEnvironment, DummyHostEnvironment>();
1821
services.AddSwaggerGen();
19-
services.AddMvcCore().AddJsonOptions(o => o.JsonSerializerOptions.Converters.Add(new DummyConverter()));
22+
services.AddMvcCore().AddJsonOptions(o => o.JsonSerializerOptions.AllowTrailingCommas = true);
2023
services.AddSwaggerGenMinimalApisJsonOptions();
2124

2225
using var provider = services.BuildServiceProvider();
2326

24-
var swaggerGenConverters = provider.GetService<IOptions<SwaggerGenJsonOptions>>().Value.SerializerOptions.Converters;
25-
26-
Assert.Empty(swaggerGenConverters);
27+
var minimalApiJsonOptions = provider.GetService<IOptions<MinimalApiJsonOptions>>().Value.SerializerOptions;
28+
var swaggerGenSerializerOptions = provider.GetService<IOptions<SwaggerGenJsonOptions>>().Value.SerializerOptions;
29+
Assert.Equal(minimalApiJsonOptions, swaggerGenSerializerOptions);
2730
}
2831

2932
[Fact]
3033
public static void Ensure_SwaggerGenJsonOptions_Uses_Mvc_JsonOptions_When_Overridden()
3134
{
32-
var expectedDummyConverter = new DummyConverter();
33-
3435
var services = new ServiceCollection();
3536
services.AddSingleton<IWebHostEnvironment, DummyHostEnvironment>();
3637
services.AddSwaggerGen();
37-
services.ConfigureHttpJsonOptions(o => o.SerializerOptions.Converters.Add(new DummyConverter()));
38-
services.AddMvcCore().AddJsonOptions(o => o.JsonSerializerOptions.Converters.Add(expectedDummyConverter));
38+
services.ConfigureHttpJsonOptions(o => o.SerializerOptions.AllowTrailingCommas = true);
3939
services.AddSwaggerGenMvcJsonOptions();
4040

4141
using var provider = services.BuildServiceProvider();
4242

43-
var swaggerGenDummyConverter = provider.GetService<IOptions<SwaggerGenJsonOptions>>().Value.SerializerOptions.Converters.FirstOrDefault();
44-
45-
Assert.Equal(expectedDummyConverter, swaggerGenDummyConverter);
43+
var mvcJsonOptions = provider.GetService<IOptions<MvcJsonOptions>>().Value.JsonSerializerOptions;
44+
var swaggerGenSerializerOptions = provider.GetService<IOptions<SwaggerGenJsonOptions>>().Value.SerializerOptions;
45+
Assert.Equal(mvcJsonOptions, swaggerGenSerializerOptions);
4646
}
4747

4848
[Fact]
4949
public static void Ensure_SwaggerGenJsonOptions_Uses_Mvc_JsonOptions_When_Not_Using_Minimal_Apis()
5050
{
51-
var expectedDummyConverter = new DummyConverter();
52-
5351
var services = new ServiceCollection();
5452
services.AddSingleton<IWebHostEnvironment, DummyHostEnvironment>();
5553
services.AddSwaggerGen();
56-
services.AddMvcCore().AddJsonOptions(o => o.JsonSerializerOptions.Converters.Add(expectedDummyConverter));
54+
services.AddMvcCore().AddJsonOptions(o => o.JsonSerializerOptions.AllowTrailingCommas = true);
5755

5856
using var provider = services.BuildServiceProvider();
5957

60-
var swaggerGenDummyConverter = provider.GetService<IOptions<SwaggerGenJsonOptions>>().Value.SerializerOptions.Converters.FirstOrDefault();
61-
62-
Assert.Equal(expectedDummyConverter, swaggerGenDummyConverter);
58+
var mvcJsonOptions = provider.GetService<IOptions<MvcJsonOptions>>().Value.JsonSerializerOptions;
59+
var swaggerGenSerializerOptions = provider.GetService<IOptions<SwaggerGenJsonOptions>>().Value.SerializerOptions;
60+
Assert.Equal(mvcJsonOptions, swaggerGenSerializerOptions);
6361
}
6462

6563
[Fact]
6664
public static void Ensure_SwaggerGenJsonOptions_Uses_MinimalApi_JsonOptions_When_Configured()
6765
{
68-
var expectedDummyConverter = new DummyConverter();
69-
7066
var services = new ServiceCollection();
7167
services.AddSingleton<IWebHostEnvironment, DummyHostEnvironment>();
7268
services.AddSwaggerGen();
73-
services.ConfigureHttpJsonOptions(o => o.SerializerOptions.Converters.Add(expectedDummyConverter));
74-
services.AddMvcCore().AddJsonOptions(o => o.JsonSerializerOptions.Converters.Add(new DummyConverter()));
69+
services.ConfigureHttpJsonOptions(o => o.SerializerOptions.AllowTrailingCommas = true);
70+
services.AddMvcCore().AddJsonOptions(o => o.JsonSerializerOptions.AllowTrailingCommas = true);
7571

7672
using var provider = services.BuildServiceProvider();
7773

78-
var swaggerGenDummyConverter = provider.GetService<IOptions<SwaggerGenJsonOptions>>().Value.SerializerOptions.Converters.FirstOrDefault();
79-
80-
Assert.Equal(expectedDummyConverter, swaggerGenDummyConverter);
81-
}
82-
83-
private sealed class DummyConverter : JsonConverter<object>
84-
{
85-
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
86-
{
87-
throw new NotImplementedException();
88-
}
89-
90-
public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
91-
{
92-
throw new NotImplementedException();
93-
}
74+
var minimalApiJsonOptions = provider.GetService<IOptions<MinimalApiJsonOptions>>().Value.SerializerOptions;
75+
var swaggerGenSerializerOptions = provider.GetService<IOptions<SwaggerGenJsonOptions>>().Value.SerializerOptions;
76+
Assert.Equal(minimalApiJsonOptions, swaggerGenSerializerOptions);
9477
}
9578
}

test/WebSites/Basic/Startup.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public void ConfigureServices(IServiceCollection services)
4242

4343
c.EnableAnnotations();
4444
});
45+
46+
services.AddSwaggerGenMinimalApisJsonOptions();
4547
}
4648

4749
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

test/WebSites/MinimalAppWithHostedServices/Program.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
c.SwaggerDoc("v1", new() { Title = "MinimalApp", Version = "v1" });
77
});
88

9+
builder.Services.AddSwaggerGenMinimalApisJsonOptions();
10+
911
builder.Services.AddHostedService<HostedService>();
1012

1113
var app = builder.Build();

0 commit comments

Comments
 (0)