RicoSuter / NSwag

The Swagger/OpenAPI toolchain for .NET, ASP.NET Core and TypeScript.
http://NSwag.org
MIT License
6.77k stars 1.29k forks source link

Cannot add SerializerSettings #2677

Open Saibamen opened 4 years ago

Saibamen commented 4 years ago

Hello.

.NET Framework 4.7.2 with latest NSwag with OWIN.

I wanted to add StringEnumConverter() to Converters in SerializerSettings, but my SerializerSettings is null, so I initiate them, and after that, my Swagger not working anymore.

RouteTable.Routes.MapOwinPath("swagger", app =>
{
    app.UseSwaggerUi3(typeof(WebApiApplication).Assembly, settings =>
    {
        settings.MiddlewareBasePath = "/swagger";
        var bla = settings.GeneratorSettings.SerializerSettings; // This is null
        settings.GeneratorSettings.SerializerSettings = new JsonSerializerSettings();
        //settings.GeneratorSettings.SerializerSettings.Converters.Add(new StringEnumConverter());
    });
});

image

RicoSuter commented 4 years ago

my Swagger not working anymore? Exception and stacktrace available?

Saibamen commented 4 years ago
Server Error in '/' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[NullReferenceException: Object reference not set to an instance of an object.]
   NJsonSchema.Generation.JsonSchemaGeneratorSettings.ResolveContract(Type type) +174
   NJsonSchema.Generation.DefaultReflectionService.GetDescription(ContextualType contextualType, ReferenceTypeNullHandling defaultReferenceTypeNullHandling, JsonSchemaGeneratorSettings settings) +2074
   NSwag.Generation.Processors.OperationResponseProcessorBase.ProcessOperationDescriptions(IEnumerable`1 operationDescriptions, ParameterInfo returnParameter, OperationProcessorContext context, String successResponseDescription) +459
   NSwag.Generation.Processors.OperationResponseProcessorBase.ProcessResponseTypeAttributes(OperationProcessorContext operationProcessorContext, IEnumerable`1 responseTypeAttributes) +84
   NSwag.Generation.WebApi.Processors.OperationResponseProcessor.Process(OperationProcessorContext context) +458
   NSwag.Generation.WebApi.WebApiOpenApiDocumentGenerator.RunOperationProcessors(OpenApiDocument document, Type controllerType, MethodInfo methodInfo, OpenApiOperationDescription operationDescription, List`1 allOperations, OpenApiDocumentGenerator swaggerGenerator, OpenApiSchemaResolver schemaResolver) +160
   NSwag.Generation.WebApi.WebApiOpenApiDocumentGenerator.AddOperationDescriptionsToDocument(OpenApiDocument document, Type controllerType, List`1 operations, OpenApiDocumentGenerator swaggerGenerator, OpenApiSchemaResolver schemaResolver) +239
   NSwag.Generation.WebApi.WebApiOpenApiDocumentGenerator.GenerateForController(OpenApiDocument document, Type controllerType, OpenApiDocumentGenerator swaggerGenerator, OpenApiSchemaResolver schemaResolver) +930
   NSwag.Generation.WebApi.<GenerateForControllersAsync>d__7.MoveNext() +404
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
   NSwag.AspNet.Owin.Middlewares.<GenerateDocumentAsync>d__9.MoveNext() +226
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
   NSwag.AspNet.Owin.Middlewares.<GetDocumentAsync>d__8.MoveNext() +788
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +102
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
   NSwag.AspNet.Owin.Middlewares.<Invoke>d__7.MoveNext() +348

[AggregateException: One or more errors occurred.]
   Microsoft.Owin.Host.SystemWeb.CallContextAsyncResult.End(IAsyncResult result) +64
   Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.EndProcessRequest(IAsyncResult result) +7
   System.Web.<>c__DisplayClass7_0.<InvokeEndHandler>b__0() +30
   System.Web.StepInvoker.Invoke(Action executionStep) +100
   System.Web.<>c__DisplayClass4_0.<Invoke>b__0() +17
   Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule.OnExecuteRequestStep(HttpContextBase context, Action step) +64
   System.Web.<>c__DisplayClass284_0.<OnExecuteRequestStep>b__0(Action nextStepAction) +55
   System.Web.StepInvoker.Invoke(Action executionStep) +84
   System.Web.CallHandlerExecutionStep.InvokeEndHandler(IAsyncResult ar) +113
   System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +126

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.8.4075.0
RicoSuter commented 4 years ago

Maybe you also need to set the ContractResolver property on the settings object.