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 @@
-
+
+
+
+