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)