diff --git a/src/NJsonSchema.CodeGeneration.CSharp.Tests/CSharpJsonSerializerGeneratorTests.cs b/src/NJsonSchema.CodeGeneration.CSharp.Tests/CSharpJsonSerializerGeneratorTests.cs index cacd08917..bac53233c 100644 --- a/src/NJsonSchema.CodeGeneration.CSharp.Tests/CSharpJsonSerializerGeneratorTests.cs +++ b/src/NJsonSchema.CodeGeneration.CSharp.Tests/CSharpJsonSerializerGeneratorTests.cs @@ -6,14 +6,13 @@ namespace NJsonSchema.CodeGeneration.CSharp.Tests public class CSharpJsonSerializerGeneratorTests { [Fact] - public void When_using_SytemTextJson_with_JsonConverters_GenerateJsonSerializerParameterCode_generates_correctly() + public void When_using_SytemTextJson_GenerateJsonSerializerParameterCode_generates_correctly() { //// Arrange var additionalJsonConverters = new string[] { "AdditionalConverter1", "AdditionalConverter2" }; var settings = new CSharpGeneratorSettings { - JsonLibrary = CSharpJsonLibrary.SystemTextJson, - JsonConverters = new string[] { "CustomConverter1", "CustomConverter2" } + JsonLibrary = CSharpJsonLibrary.SystemTextJson }; //// Act @@ -21,7 +20,7 @@ public void When_using_SytemTextJson_with_JsonConverters_GenerateJsonSerializerP Console.WriteLine(output); //// Assert - Assert.Equal(", new System.Text.Json.JsonSerializerOptions(); var converters = new System.Text.Json.Serialization.JsonConverter[] { new CustomConverter1(), new CustomConverter2(), new AdditionalConverter1(), new AdditionalConverter2() }", output); + Assert.Equal("new System.Text.Json.JsonSerializerOptions()", output); } [Fact] @@ -40,7 +39,7 @@ public void When_using_NewtonsoftJson_with_JsonConverters_GenerateJsonSerializer Console.WriteLine(output); //// Assert - Assert.Equal(", new Newtonsoft.Json.JsonConverter[] { new CustomConverter1(), new CustomConverter2(), new AdditionalConverter1(), new AdditionalConverter2() }", output); + Assert.Equal("new Newtonsoft.Json.JsonConverter[] { new CustomConverter1(), new CustomConverter2(), new AdditionalConverter1(), new AdditionalConverter2() }", output); } [Fact] @@ -58,7 +57,7 @@ public void When_using_SytemTextJson_with_JsonSerializerSettingsOrOptionsTransfo Console.WriteLine(output); //// Assert - Assert.Equal(", TestJsonSerializerSettingsTransformationMethod(new System.Text.Json.JsonSerializerOptions())", output); + Assert.Equal("TestJsonSerializerSettingsTransformationMethod(new System.Text.Json.JsonSerializerOptions())", output); } [Fact] @@ -79,7 +78,45 @@ public void When_using_NewtonsoftJson_with_HandleReferences_and_JsonConverters_a Console.WriteLine(output); //// Assert - Assert.Equal(", TestJsonSerializerSettingsTransformationMethod(new Newtonsoft.Json.JsonSerializerSettings { PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All, Converters = new Newtonsoft.Json.JsonConverter[] { new CustomConverter1(), new CustomConverter2(), new AdditionalConverter1(), new AdditionalConverter2() } })", output); + Assert.Equal("TestJsonSerializerSettingsTransformationMethod(new Newtonsoft.Json.JsonSerializerSettings { PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All, Converters = new Newtonsoft.Json.JsonConverter[] { new CustomConverter1(), new CustomConverter2(), new AdditionalConverter1(), new AdditionalConverter2() } })", output); + } + + [Fact] + public void When_using_SytemTextJson_with_JsonConverters_GenerateJsonConvertersArrayCode_generates_correctly() + { + //// Arrange + var additionalJsonConverters = new string[] { "AdditionalConverter1", "AdditionalConverter2" }; + var settings = new CSharpGeneratorSettings + { + JsonLibrary = CSharpJsonLibrary.SystemTextJson, + JsonConverters = new string[] { "CustomConverter1", "CustomConverter2" } + }; + + //// Act + var output = CSharpJsonSerializerGenerator.GenerateJsonConvertersArrayCode(settings, additionalJsonConverters); + Console.WriteLine(output); + + //// Assert + Assert.Equal("new System.Text.Json.Serialization.JsonConverter[] { new CustomConverter1(), new CustomConverter2(), new AdditionalConverter1(), new AdditionalConverter2() }", output); + } + + [Fact] + public void When_using_NewtonsoftJson_with_JsonConverters_GenerateJsonConvertersArrayCode_generates_correctly() + { + //// Arrange + var additionalJsonConverters = new string[] { "AdditionalConverter1", "AdditionalConverter2" }; + var settings = new CSharpGeneratorSettings + { + JsonLibrary = CSharpJsonLibrary.NewtonsoftJson, + JsonConverters = new string[] { "CustomConverter1", "CustomConverter2" } + }; + + //// Act + var output = CSharpJsonSerializerGenerator.GenerateJsonConvertersArrayCode(settings, additionalJsonConverters); + Console.WriteLine(output); + + //// Assert + Assert.Equal("new Newtonsoft.Json.JsonConverter[] { new CustomConverter1(), new CustomConverter2(), new AdditionalConverter1(), new AdditionalConverter2() }", output); } } } diff --git a/src/NJsonSchema.CodeGeneration.CSharp.Tests/GeneralGeneratorTests.cs b/src/NJsonSchema.CodeGeneration.CSharp.Tests/GeneralGeneratorTests.cs index 74dd36b13..a5f9dbfe9 100644 --- a/src/NJsonSchema.CodeGeneration.CSharp.Tests/GeneralGeneratorTests.cs +++ b/src/NJsonSchema.CodeGeneration.CSharp.Tests/GeneralGeneratorTests.cs @@ -6,6 +6,7 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; @@ -385,9 +386,9 @@ public void When_name_contains_unallowed_characters_then_they_are_converted_to_v { Type = JsonObjectType.String }; - + var generator = new CSharpGenerator(schema); - + // Act var output = generator.GenerateFile("MyClass"); @@ -594,7 +595,7 @@ public async Task When_patternProperties_is_set_with_string_value_type_then_corr ""required"": [ ""dict"" ], ""properties"": { ""dict"": { - ""type"": ""object"", + ""type"": ""object"", ""additionalProperties"": false, ""patternProperties"": { ""^[a-zA-Z_$][a-zA-Z_$0-9]*$"": { @@ -686,15 +687,19 @@ public async Task When_property_is_required_then_CSharp_code_is_correct() } }".Replace("\r", string.Empty), schemaJson.Replace("\r", string.Empty)); - Assert.Contains(@" [Newtonsoft.Json.JsonProperty(""FirstName"", Required = Newtonsoft.Json.Required.Always)] + var expected = @"[Newtonsoft.Json.JsonProperty(""FirstName"", Required = Newtonsoft.Json.Required.Always)] [System.ComponentModel.DataAnnotations.Required] public string FirstName { get; set; } - + [Newtonsoft.Json.JsonProperty(""MiddleName"", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public string MiddleName { get; set; } - + [Newtonsoft.Json.JsonProperty(""Age"", Required = Newtonsoft.Json.Required.AllowNull)] - public int? Age { get; set; }".Replace("\r", string.Empty), code.Replace("\r", string.Empty)); + public int? Age { get; set; }"; + var normalizedExpected = Regex.Replace(expected, @"\s+", string.Empty); + var normalizedCode = Regex.Replace(code, @"\s+", string.Empty); + + Assert.Contains(normalizedExpected, normalizedCode); AssertCompile(code); } @@ -851,16 +856,16 @@ public async Task When_definition_is_named_Object_then_JObject_is_generated() //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""$ref"": ""#/definitions/Object"" } - }, + }, ""definitions"": { - ""Object"": { - ""type"": ""object"", - ""properties"": {} + ""Object"": { + ""type"": ""object"", + ""properties"": {} } } }"; @@ -973,7 +978,7 @@ public async Task When_definition_contains_minimum_a_range_attribute_is_added_wi //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""integer"", @@ -1003,7 +1008,7 @@ public async Task When_definition_contains_maximum_a_range_attribute_is_added_wi //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""integer"", @@ -1033,7 +1038,7 @@ public async Task When_definition_contains_both_minimum_and_maximum_a_range_attr //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""integer"", @@ -1064,7 +1069,7 @@ public async Task When_definition_contains_maximum_a_range_attribute_is_not_adde //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""string"", @@ -1094,7 +1099,7 @@ public async Task When_definition_contains_min_length_a_string_length_attribute_ //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""string"", @@ -1124,7 +1129,7 @@ public async Task When_definition_contains_max_length_a_string_length_attribute_ //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""string"", @@ -1154,7 +1159,7 @@ public async Task When_definition_contains_both_min_and_max_length_a_string_leng //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""string"", @@ -1185,7 +1190,7 @@ public async Task When_definition_contains_both_min_length_a_string_length_attri //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""number"", @@ -1216,7 +1221,7 @@ public async Task When_definition_contains_both_min_items_and_max_items_a_min_le //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""array"", @@ -1248,7 +1253,7 @@ public async Task When_definition_contains_pattern_a_regular_expression_attribut //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""string"", @@ -1278,7 +1283,7 @@ public async Task When_definition_contains_pattern_but_type_is_not_string_a_regu //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""foo"": { ""type"": ""number"", @@ -1308,7 +1313,7 @@ public async Task When_definition_contains_restrictions_but_render_data_annotati //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""a"": { ""type"": ""integer"", @@ -1395,7 +1400,7 @@ public async Task When_definition_contains_date_converter_should_be_added_for_da //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""a"": { ""type"": ""string"", @@ -1539,7 +1544,7 @@ public async Task When_definition_contains_date_converter_should_be_added_for_da //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""a"": { ""type"": ""string"", @@ -1571,7 +1576,7 @@ public async Task When_definition_contains_datetime_converter_should_not_be_adde //// Arrange var json = @"{ - ""type"": ""object"", + ""type"": ""object"", ""properties"": { ""a"": { ""type"": ""string"", @@ -1763,5 +1768,169 @@ private static void AssertCompile(string code) Assert.Empty(sb.ToString()); } + + [Fact] + public async Task When_using_SytemTextJson_without_JsonConverters_generates_FromJson_and_ToJson_correctly() + { + //// Arrange + var expectedToJsonMethod = +@" +public string ToJson() +{ + var options = new System.Text.Json.JsonSerializerOptions(); + return System.Text.Json.JsonSerializer.Serialize(this, options); +} +"; + + var expectedFromJsonMethod = +@" +public static Person FromJson(string data) +{ + var options = new System.Text.Json.JsonSerializerOptions(); + return System.Text.Json.JsonSerializer.Deserialize(data, options); +} +"; + + var generator = await CreateGeneratorAsync(); + generator.Settings.JsonLibrary = CSharpJsonLibrary.SystemTextJson; + generator.Settings.GenerateJsonMethods = true; + + //// Act + var output = generator.GenerateFile("MyClass"); + //Remove the spaces from the string to avoid indentation change errors + var normalizedOutput = Regex.Replace(output, @"\s+", string.Empty); + var normalizedExpectedToJsonMethod = Regex.Replace(expectedToJsonMethod, @"\s+", string.Empty); + var normalizedExpectedFromJsonMethodMethod = Regex.Replace(expectedFromJsonMethod, @"\s+", string.Empty); + + //// Assert + Assert.Contains(normalizedExpectedToJsonMethod, normalizedOutput); + Assert.Contains(normalizedExpectedFromJsonMethodMethod, normalizedOutput); + + AssertCompile(output); + } + + [Fact] + public async Task When_using_SytemTextJson_with_JsonConverters_generates_FromJson_and_ToJson_correctly() + { + //// Arrange + var expectedToJsonMethod = +@" +public string ToJson() +{ + var options = new System.Text.Json.JsonSerializerOptions(); + var converters = new System.Text.Json.Serialization.JsonConverter[] { new CustomConverter1(), new CustomConverter2() }; + foreach(var converter in converters) + options.Converters.Add(converter); + return System.Text.Json.JsonSerializer.Serialize(this, options); +} +"; + + var expectedFromJsonMethod = +@" +public static Person FromJson(string data) +{ + var options = new System.Text.Json.JsonSerializerOptions(); + var converters = new System.Text.Json.Serialization.JsonConverter[] { new CustomConverter1(), new CustomConverter2() }; + foreach(var converter in converters) + options.Converters.Add(converter); + return System.Text.Json.JsonSerializer.Deserialize(data, options); +} +"; + + var generator = await CreateGeneratorAsync(); + generator.Settings.JsonLibrary = CSharpJsonLibrary.SystemTextJson; + generator.Settings.GenerateJsonMethods = true; + generator.Settings.JsonConverters = new[] { "CustomConverter1", "CustomConverter2" }; + + //// Act + var output = generator.GenerateFile("MyClass"); + //Remove the spaces from the string to avoid indentation change errors + var normalizedOutput = Regex.Replace(output, @"\s+", string.Empty); + var normalizedExpectedToJsonMethod = Regex.Replace(expectedToJsonMethod, @"\s+", string.Empty); + var normalizedExpectedFromJsonMethodMethod = Regex.Replace(expectedFromJsonMethod, @"\s+", string.Empty); + + //// Assert + Assert.Contains(normalizedExpectedToJsonMethod, normalizedOutput); + Assert.Contains(normalizedExpectedFromJsonMethodMethod, normalizedOutput); + + AssertCompile(output); + } + + [Fact] + public async Task When_using_NewtonsoftJson_without_JsonConverters_generates_FromJson_and_ToJson_correctly() + { + //// Arrange + var expectedToJsonMethod = +@" +public string ToJson() +{ + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); +} +"; + + var expectedFromJsonMethod = +@" +public static Person FromJson(string data) +{ + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); +} +"; + + var generator = await CreateGeneratorAsync(); + generator.Settings.JsonLibrary = CSharpJsonLibrary.NewtonsoftJson; + generator.Settings.GenerateJsonMethods = true; + + //// Act + var output = generator.GenerateFile("MyClass"); + //Remove the spaces from the string to avoid indentation change errors + var normalizedOutput = Regex.Replace(output, @"\s+", string.Empty); + var normalizedExpectedToJsonMethod = Regex.Replace(expectedToJsonMethod, @"\s+", string.Empty); + var normalizedExpectedFromJsonMethodMethod = Regex.Replace(expectedFromJsonMethod, @"\s+", string.Empty); + + //// Assert + Assert.Contains(normalizedExpectedToJsonMethod, normalizedOutput); + Assert.Contains(normalizedExpectedFromJsonMethodMethod, normalizedOutput); + + AssertCompile(output); + } + + [Fact] + public async Task When_using_NewtonsoftJson_with_JsonConverters_generates_FromJson_and_ToJson_correctly() + { + //// Arrange + var expectedToJsonMethod = +@" +public string ToJson() +{ + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonConverter[] { new CustomConverter1(), new CustomConverter2() }); +} +"; + + var expectedFromJsonMethod = +@" +public static Person FromJson(string data) +{ + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonConverter[] { new CustomConverter1(), new CustomConverter2() }); +} +"; + + var generator = await CreateGeneratorAsync(); + generator.Settings.JsonLibrary = CSharpJsonLibrary.NewtonsoftJson; + generator.Settings.GenerateJsonMethods = true; + generator.Settings.JsonConverters = new[] { "CustomConverter1", "CustomConverter2" }; + + //// Act + var output = generator.GenerateFile("MyClass"); + //Remove the spaces from the string to avoid indentation change errors + var normalizedOutput = Regex.Replace(output, @"\s+", string.Empty); + var normalizedExpectedToJsonMethod = Regex.Replace(expectedToJsonMethod, @"\s+", string.Empty); + var normalizedExpectedFromJsonMethodMethod = Regex.Replace(expectedFromJsonMethod, @"\s+", string.Empty); + + //// Assert + Assert.Contains(normalizedExpectedToJsonMethod, normalizedOutput); + Assert.Contains(normalizedExpectedFromJsonMethodMethod, normalizedOutput); + + AssertCompile(output); + } } } diff --git a/src/NJsonSchema.CodeGeneration.CSharp/CSharpJsonSerializerGenerator.cs b/src/NJsonSchema.CodeGeneration.CSharp/CSharpJsonSerializerGenerator.cs index 981df4f4d..2588e6967 100644 --- a/src/NJsonSchema.CodeGeneration.CSharp/CSharpJsonSerializerGenerator.cs +++ b/src/NJsonSchema.CodeGeneration.CSharp/CSharpJsonSerializerGenerator.cs @@ -20,12 +20,28 @@ public static class CSharpJsonSerializerGenerator /// The code. public static string GenerateJsonSerializerParameterCode(CSharpGeneratorSettings settings, IEnumerable additionalJsonConverters) { - var jsonConverters = (settings.JsonConverters ?? new string[0]).Concat(additionalJsonConverters ?? new string[0]).ToList(); + var jsonConverters = GetJsonConverters(settings, additionalJsonConverters); var hasJsonConverters = jsonConverters.Any(); return GenerateForJsonLibrary(settings, jsonConverters, hasJsonConverters); } + /// Generates the JSON converters array code. + /// The settings. + /// The additional JSON converters. + /// The code. + public static string GenerateJsonConvertersArrayCode(CSharpGeneratorSettings settings, IEnumerable additionalJsonConverters) + { + var jsonConverters = GetJsonConverters(settings, additionalJsonConverters); + + return GenerateConverters(jsonConverters, settings.JsonLibrary); + } + + private static List GetJsonConverters(CSharpGeneratorSettings settings, IEnumerable additionalJsonConverters) + { + return (settings.JsonConverters ?? new string[0]).Concat(additionalJsonConverters ?? new string[0]).ToList(); + } + private static string GenerateForJsonLibrary(CSharpGeneratorSettings settings, List jsonConverters, bool hasJsonConverters) { var useSettingsTransformationMethod = !string.IsNullOrEmpty(settings.JsonSerializerSettingsTransformationMethod); @@ -34,7 +50,7 @@ private static string GenerateForJsonLibrary(CSharpGeneratorSettings settings, L case CSharpJsonLibrary.NewtonsoftJson: if (settings.HandleReferences || useSettingsTransformationMethod) { - return ", " + + return (useSettingsTransformationMethod ? settings.JsonSerializerSettingsTransformationMethod + "(" : string.Empty) + "new Newtonsoft.Json.JsonSerializerSettings { " + (settings.HandleReferences @@ -50,29 +66,25 @@ private static string GenerateForJsonLibrary(CSharpGeneratorSettings settings, L { if (hasJsonConverters) { - return ", " + GenerateConverters(jsonConverters, settings.JsonLibrary); + return GenerateConverters(jsonConverters, settings.JsonLibrary); } else { - return string.Empty; + return "new Newtonsoft.Json.JsonSerializerSettings()"; } } case CSharpJsonLibrary.SystemTextJson: - // TODO: add more conditions? if (useSettingsTransformationMethod || hasJsonConverters) { - return ", " + + return (useSettingsTransformationMethod ? settings.JsonSerializerSettingsTransformationMethod + "(" : string.Empty) + "new System.Text.Json.JsonSerializerOptions()" + - (useSettingsTransformationMethod ? ")" : string.Empty) + - (hasJsonConverters - ? "; var converters = " + GenerateConverters(jsonConverters, settings.JsonLibrary) - : string.Empty); + (useSettingsTransformationMethod ? ")" : string.Empty); } else { - return string.Empty; + return "new System.Text.Json.JsonSerializerOptions()"; } default: // TODO: possibly add more json converters diff --git a/src/NJsonSchema.CodeGeneration.CSharp/Models/ClassTemplateModel.cs b/src/NJsonSchema.CodeGeneration.CSharp/Models/ClassTemplateModel.cs index 4e87835f8..706f466e6 100644 --- a/src/NJsonSchema.CodeGeneration.CSharp/Models/ClassTemplateModel.cs +++ b/src/NJsonSchema.CodeGeneration.CSharp/Models/ClassTemplateModel.cs @@ -146,6 +146,9 @@ public ClassTemplateModel(string typeName, CSharpGeneratorSettings settings, /// Gets the JSON serializer parameter code. public string JsonSerializerParameterCode => CSharpJsonSerializerGenerator.GenerateJsonSerializerParameterCode(_settings, null); + /// Gets the JSON converters array code. + public string JsonConvertersArrayCode => CSharpJsonSerializerGenerator.GenerateJsonConvertersArrayCode(_settings, null); + /// Gets a value indicating whether the class is deprecated. public bool IsDeprecated => _schema.IsDeprecated; diff --git a/src/NJsonSchema.CodeGeneration.CSharp/Templates/Class.FromJson.liquid b/src/NJsonSchema.CodeGeneration.CSharp/Templates/Class.FromJson.liquid index 12707a145..0aa650d1d 100644 --- a/src/NJsonSchema.CodeGeneration.CSharp/Templates/Class.FromJson.liquid +++ b/src/NJsonSchema.CodeGeneration.CSharp/Templates/Class.FromJson.liquid @@ -1,8 +1,14 @@ public static {{ ClassName }} FromJson(string data) { {% if UseSystemTextJson -%} - return System.Text.Json.JsonSerializer.Deserialize<{{ ClassName }}>(data{{ JsonSerializerParameterCode }}); + var options = {{ JsonSerializerParameterCode }}; +{% if JsonConvertersArrayCode contains "System.Text.Json.Serialization.JsonConverter[]" -%} + var converters = {{ JsonConvertersArrayCode }}; + foreach(var converter in converters) + options.Converters.Add(converter); +{% endif -%} + return System.Text.Json.JsonSerializer.Deserialize<{{ ClassName }}>(data, options); {% else -%} - return Newtonsoft.Json.JsonConvert.DeserializeObject<{{ ClassName }}>(data{{ JsonSerializerParameterCode }}); + return Newtonsoft.Json.JsonConvert.DeserializeObject<{{ ClassName }}>(data, {{ JsonSerializerParameterCode }}); {% endif -%} } \ No newline at end of file diff --git a/src/NJsonSchema.CodeGeneration.CSharp/Templates/Class.ToJson.liquid b/src/NJsonSchema.CodeGeneration.CSharp/Templates/Class.ToJson.liquid index fc7ff02a6..691a0d7b0 100644 --- a/src/NJsonSchema.CodeGeneration.CSharp/Templates/Class.ToJson.liquid +++ b/src/NJsonSchema.CodeGeneration.CSharp/Templates/Class.ToJson.liquid @@ -1,8 +1,14 @@ -public string ToJson() +public string ToJson() { {% if UseSystemTextJson -%} - return System.Text.Json.JsonSerializer.Serialize(this{{ JsonSerializerParameterCode }}); + var options = {{ JsonSerializerParameterCode }}; +{% if JsonConvertersArrayCode contains "System.Text.Json.Serialization.JsonConverter[]" -%} + var converters = {{ JsonConvertersArrayCode }}; + foreach(var converter in converters) + options.Converters.Add(converter); +{% endif -%} + return System.Text.Json.JsonSerializer.Serialize(this, options); {% else -%} - return Newtonsoft.Json.JsonConvert.SerializeObject(this{{ JsonSerializerParameterCode }}); + return Newtonsoft.Json.JsonConvert.SerializeObject(this, {{ JsonSerializerParameterCode }}); {% endif -%} } \ No newline at end of file