diff --git a/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props b/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props index 4f970e795c..271ba89224 100644 --- a/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props +++ b/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props @@ -66,6 +66,7 @@ $(NSwagDictionaryBaseType) $(NSwagClassStyle) $(NSwagJsonLibrary) + $(NSwagJsonPolymorphicSerializationStyle) $(NSwagGenerateDefaultValues) $(NSwagGenerateDataAnnotations) $(NSwagExcludedTypeNames) @@ -154,6 +155,7 @@ $(NSwagDictionaryBaseType) $(NSwagClassStyle) $(NSwagJsonLibrary) + $(NSwagJsonPolymorphicSerializationStyle) $(NSwagGenerateDefaultValues) $(NSwagGenerateDataAnnotations) $(NSwagExcludedTypeNames) diff --git a/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.targets b/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.targets index 46996343e5..17cfa4e144 100644 --- a/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.targets +++ b/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.targets @@ -209,6 +209,9 @@ %(Command) /jsonLibrary:%(NSwagJsonLibrary) + + %(Command) /jsonPolymorphicSerializationStyle:%(NSwagJsonPolymorphicSerializationStyle) + %(Command) /generateDefaultValues:%(NSwagGenerateDefaultValues) diff --git a/src/NSwag.Commands/Commands/CodeGeneration/JsonSchemaToCSharpCommand.cs b/src/NSwag.Commands/Commands/CodeGeneration/JsonSchemaToCSharpCommand.cs index e506599ee0..f9d3c91c66 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/JsonSchemaToCSharpCommand.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/JsonSchemaToCSharpCommand.cs @@ -148,6 +148,13 @@ public CSharpJsonLibrary JsonLibrary set => Settings.JsonLibrary = value; } + [Argument(Name = "JsonPolymorphicSerializationStyle", IsRequired = false, Description = "The CSharp JSON polymorphic serialization style, 'NJsonSchema' or 'SystemTextJson' (default: 'NJsonSchema', 'SystemTextJson' is experimental).")] + public CSharpJsonPolymorphicSerializationStyle JsonPolymorphicSerializationStyle + { + get => Settings.JsonPolymorphicSerializationStyle; + set => Settings.JsonPolymorphicSerializationStyle = value; + } + [Argument(Name = "GenerateDefaultValues", IsRequired = false, Description = "Specifies whether to generate default values for properties (may generate CSharp 6 code, default: true).")] public bool GenerateDefaultValues { diff --git a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpCommandBase.cs b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpCommandBase.cs index 914c5ea011..2beea57d9a 100644 --- a/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpCommandBase.cs +++ b/src/NSwag.Commands/Commands/CodeGeneration/OpenApiToCSharpCommandBase.cs @@ -245,6 +245,13 @@ public CSharpJsonLibrary JsonLibrary set => Settings.CSharpGeneratorSettings.JsonLibrary = value; } + [Argument(Name = "JsonPolymorphicSerializationStyle", IsRequired = false, Description = "The CSharp JSON polymorphic serialization style, 'NJsonSchema' or 'SystemTextJson' (default: 'NJsonSchema', 'SystemTextJson' is experimental).")] + public CSharpJsonPolymorphicSerializationStyle JsonPolymorphicSerializationStyle + { + get => Settings.CSharpGeneratorSettings.JsonPolymorphicSerializationStyle; + set => Settings.CSharpGeneratorSettings.JsonPolymorphicSerializationStyle = value; + } + [Argument(Name = "GenerateDefaultValues", IsRequired = false, Description = "Specifies whether to generate default values for properties (may generate CSharp 6 code, default: true).")] public bool GenerateDefaultValues { diff --git a/src/NSwag.Sample.NET80Minimal/nswag.json b/src/NSwag.Sample.NET80Minimal/nswag.json index 3c1f7acba1..5a7d35f0e0 100644 --- a/src/NSwag.Sample.NET80Minimal/nswag.json +++ b/src/NSwag.Sample.NET80Minimal/nswag.json @@ -145,6 +145,7 @@ "dictionaryBaseType": "System.Collections.Generic.Dictionary", "classStyle": "Poco", "jsonLibrary": "NewtonsoftJson", + "jsonPolymorphicSerializationStyle": "NJsonSchema", "generateDefaultValues": true, "generateDataAnnotations": true, "excludedTypeNames": [], @@ -206,6 +207,7 @@ "dictionaryBaseType": "System.Collections.Generic.Dictionary", "classStyle": "Poco", "jsonLibrary": "NewtonsoftJson", + "jsonPolymorphicSerializationStyle": "NJsonSchema", "generateDefaultValues": true, "generateDataAnnotations": true, "excludedTypeNames": [], diff --git a/src/NSwag.Sample.NET90Minimal/nswag.json b/src/NSwag.Sample.NET90Minimal/nswag.json index 720f576a37..37a8da353f 100644 --- a/src/NSwag.Sample.NET90Minimal/nswag.json +++ b/src/NSwag.Sample.NET90Minimal/nswag.json @@ -145,6 +145,7 @@ "dictionaryBaseType": "System.Collections.Generic.Dictionary", "classStyle": "Poco", "jsonLibrary": "NewtonsoftJson", + "jsonPolymorphicSerializationStyle": "NJsonSchema", "generateDefaultValues": true, "generateDataAnnotations": true, "excludedTypeNames": [], @@ -206,6 +207,7 @@ "dictionaryBaseType": "System.Collections.Generic.Dictionary", "classStyle": "Poco", "jsonLibrary": "NewtonsoftJson", + "jsonPolymorphicSerializationStyle": "NJsonSchema", "generateDefaultValues": true, "generateDataAnnotations": true, "excludedTypeNames": [], diff --git a/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs b/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs index f8b624aef7..aacdc84612 100644 --- a/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs +++ b/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs @@ -43,6 +43,11 @@ public OpenApiToCSharpClientCommand Command .Select(t => (CSharpJsonLibrary)Enum.Parse(typeof(CSharpJsonLibrary), t)) .ToArray(); + /// Gets the list of JSON polymorphic serialization styles. + public CSharpJsonPolymorphicSerializationStyle[] JsonPolymorphicSerializationStyles { get; } = Enum.GetNames(typeof(CSharpJsonPolymorphicSerializationStyle)) + .Select(t => (CSharpJsonPolymorphicSerializationStyle)Enum.Parse(typeof(CSharpJsonPolymorphicSerializationStyle), t)) + .ToArray(); + /// Gets new line behaviors. public NewLineBehavior[] NewLineBehaviors { get; } = Enum.GetNames(typeof(NewLineBehavior)) .Select(t => (NewLineBehavior)Enum.Parse(typeof(NewLineBehavior), t)) diff --git a/src/NSwagStudio/Views/CodeGenerators/Views/CSharpSettingsView.xaml b/src/NSwagStudio/Views/CodeGenerators/Views/CSharpSettingsView.xaml index e94de89fd5..5c32890957 100644 --- a/src/NSwagStudio/Views/CodeGenerators/Views/CSharpSettingsView.xaml +++ b/src/NSwagStudio/Views/CodeGenerators/Views/CSharpSettingsView.xaml @@ -104,7 +104,12 @@ - + + + +