From 9fe15db7d0e2b7f5c9c45427b2a61a001d3b7bdf Mon Sep 17 00:00:00 2001
From: Michael Schnerring <3743342+schnerring@users.noreply.github.com>
Date: Tue, 13 Feb 2024 23:57:11 +0100
Subject: [PATCH 1/2] Add support for STJ-native C# code gen
---
.../NSwag.ApiDescription.Client.props | 4 +++-
.../NSwag.ApiDescription.Client.targets | 5 ++++-
.../Commands/CodeGeneration/JsonSchemaToCSharpCommand.cs | 7 +++++++
.../Commands/CodeGeneration/OpenApiToCSharpCommandBase.cs | 7 +++++++
src/NSwag.Sample.NET70Minimal/nswag.json | 2 ++
src/NSwag.Sample.NET80Minimal/nswag.json | 2 ++
.../SwaggerToCSharpClientGeneratorViewModel.cs | 5 +++++
.../Views/CodeGenerators/Views/CSharpSettingsView.xaml | 8 +++++++-
8 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props b/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props
index 4f970e795c..097ecdab2b 100644
--- a/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props
+++ b/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props
@@ -65,7 +65,8 @@
$(NSwagArrayBaseType)
$(NSwagDictionaryBaseType)
$(NSwagClassStyle)
- $(NSwagJsonLibrary)
+ $(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 234b673567..47576ac4d4 100644
--- a/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.targets
+++ b/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.targets
@@ -205,7 +205,10 @@
%(Command) /classStyle:%(NSwagClassStyle)
- %(Command) /jsonLibrary:%(NSwagJsonLibrary)
+ %(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 1d72e3ebfd..e307378559 100644
--- a/src/NSwag.Commands/Commands/CodeGeneration/JsonSchemaToCSharpCommand.cs
+++ b/src/NSwag.Commands/Commands/CodeGeneration/JsonSchemaToCSharpCommand.cs
@@ -142,6 +142,13 @@ public CSharpJsonLibrary JsonLibrary
set { Settings.JsonLibrary = value; }
}
+ [Argument(Name = "JsonPolymorphicSerializationStyle", IsRequired = false, Description = "The CSharp JSON polymorphic serialization style, 'NSwag' or 'SystemTextJson' (default: 'NSwag', 'SystemTextJson' is experimental).")]
+ public CSharpJsonPolymorphicSerializationStyle JsonPolymorphicSerializationStyle
+ {
+ get { return 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 a4b13b1fb5..0d82443c82 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, 'NSwag' or 'SystemTextJson' (default: 'NSwag', 'SystemTextJson' is experimental).")]
+ public CSharpJsonPolymorphicSerializationStyle JsonPolymorphicSerializationStyle
+ {
+ get { return 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.Sample.NET70Minimal/nswag.json b/src/NSwag.Sample.NET70Minimal/nswag.json
index 4d1dd750d0..37f8524f9a 100644
--- a/src/NSwag.Sample.NET70Minimal/nswag.json
+++ b/src/NSwag.Sample.NET70Minimal/nswag.json
@@ -145,6 +145,7 @@
"dictionaryBaseType": "System.Collections.Generic.Dictionary",
"classStyle": "Poco",
"jsonLibrary": "NewtonsoftJson",
+ "jsonPolymorphicSerializationStyle": "NSwag",
"generateDefaultValues": true,
"generateDataAnnotations": true,
"excludedTypeNames": [],
@@ -206,6 +207,7 @@
"dictionaryBaseType": "System.Collections.Generic.Dictionary",
"classStyle": "Poco",
"jsonLibrary": "NewtonsoftJson",
+ "jsonPolymorphicSerializationStyle": "NSwag",
"generateDefaultValues": true,
"generateDataAnnotations": true,
"excludedTypeNames": [],
diff --git a/src/NSwag.Sample.NET80Minimal/nswag.json b/src/NSwag.Sample.NET80Minimal/nswag.json
index 3c1f7acba1..b4f0106a57 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": "NSwag",
"generateDefaultValues": true,
"generateDataAnnotations": true,
"excludedTypeNames": [],
@@ -206,6 +207,7 @@
"dictionaryBaseType": "System.Collections.Generic.Dictionary",
"classStyle": "Poco",
"jsonLibrary": "NewtonsoftJson",
+ "jsonPolymorphicSerializationStyle": "NSwag",
"generateDefaultValues": true,
"generateDataAnnotations": true,
"excludedTypeNames": [],
diff --git a/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs b/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs
index 2c47873080..fc853a7877 100644
--- a/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs
+++ b/src/NSwagStudio/ViewModels/CodeGenerators/SwaggerToCSharpClientGeneratorViewModel.cs
@@ -45,6 +45,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..d3eceb1b6e 100644
--- a/src/NSwagStudio/Views/CodeGenerators/Views/CSharpSettingsView.xaml
+++ b/src/NSwagStudio/Views/CodeGenerators/Views/CSharpSettingsView.xaml
@@ -104,7 +104,13 @@
-
+
+
+
+
+
From bed6487bd8c57a69ded7d745a6b77fce657ba182 Mon Sep 17 00:00:00 2001
From: Michael Schnerring <3743342+schnerring@users.noreply.github.com>
Date: Wed, 14 Feb 2024 00:01:36 +0100
Subject: [PATCH 2/2] Fix whitespace issues
---
.../NSwag.ApiDescription.Client.props | 6 +++---
.../NSwag.ApiDescription.Client.targets | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props b/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props
index 097ecdab2b..271ba89224 100644
--- a/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props
+++ b/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.props
@@ -65,8 +65,8 @@
$(NSwagArrayBaseType)
$(NSwagDictionaryBaseType)
$(NSwagClassStyle)
- $(NSwagJsonLibrary)
- $(NSwagJsonPolymorphicSerializationStyle)
+ $(NSwagJsonLibrary)
+ $(NSwagJsonPolymorphicSerializationStyle)
$(NSwagGenerateDefaultValues)
$(NSwagGenerateDataAnnotations)
$(NSwagExcludedTypeNames)
@@ -155,7 +155,7 @@
$(NSwagDictionaryBaseType)
$(NSwagClassStyle)
$(NSwagJsonLibrary)
- $(NSwagJsonPolymorphicSerializationStyle)
+ $(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 47576ac4d4..67d2a38e23 100644
--- a/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.targets
+++ b/src/NSwag.ApiDescription.Client/NSwag.ApiDescription.Client.targets
@@ -205,10 +205,10 @@
%(Command) /classStyle:%(NSwagClassStyle)
- %(Command) /jsonLibrary:%(NSwagJsonLibrary)
+ %(Command) /jsonLibrary:%(NSwagJsonLibrary)
- %(Command) /jsonPolymorphicSerializationStyle:%(NSwagJsonPolymorphicSerializationStyle)
+ %(Command) /jsonPolymorphicSerializationStyle:%(NSwagJsonPolymorphicSerializationStyle)
%(Command) /generateDefaultValues:%(NSwagGenerateDefaultValues)