Skip to content

Commit df2ed62

Browse files
committed
More System.Text.Json serialization fixes
Apply the equivalent of RicoSuter/NJsonSchema#1863 and RicoSuter/NJsonSchema#1864 while waiting for the next version of NJsonSchema.CodeGeneration.CSharp to be released.
1 parent 0a21de3 commit df2ed62

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

src/Refitter.Core/CSharpClientGeneratorFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Reflection;
2+
using Fluid.Values;
23
using NJsonSchema.CodeGeneration;
34
using NJsonSchema.CodeGeneration.CSharp;
45
using NSwag;
@@ -106,6 +107,7 @@ private class CustomTemplateFactory : NSwag.CodeGeneration.DefaultTemplateFactor
106107
public CustomTemplateFactory(CodeGeneratorSettingsBase settings)
107108
: base(settings, [typeof(CSharpGenerator).Assembly, typeof(CSharpGeneratorBaseSettings).Assembly])
108109
{
110+
TemplateOptions.Filters.AddFilter("rtrimquestionmark", (input, _, _) => new ValueTask<FluidValue>(new StringValue(input.ToStringValue().TrimEnd('?'), encode: false)));
109111
}
110112

111113
/// <inheritdoc />
@@ -115,9 +117,15 @@ protected override string GetEmbeddedLiquidTemplate(string language, string temp
115117
return template switch
116118
{
117119
"Class" => templateText
120+
.Replace(
121+
"[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.JsonStringEnumConverter))]",
122+
"[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.JsonStringEnumConverter<{{ property.Type | rtrimquestionmark }}>))]")
118123
.Replace(
119124
"[System.Text.Json.Serialization.JsonPolymorphic(TypeDiscriminatorPropertyName = \"{{ Discriminator }}\")]",
120125
"[System.Text.Json.Serialization.JsonPolymorphic(TypeDiscriminatorPropertyName = \"{{ Discriminator }}\", UnknownDerivedTypeHandling = System.Text.Json.Serialization.JsonUnknownDerivedTypeHandling.FallBackToBaseType, IgnoreUnrecognizedTypeDiscriminators = true)]"),
126+
"Enum" => templateText.Replace(
127+
"[System.Runtime.Serialization.EnumMember(Value = @\"{{ enum.Value | replace: '\"', '\"\"' }}\")]",
128+
"[System.Text.Json.Serialization.JsonStringEnumMemberName(@\"{{ enum.Value | replace: '\"', '\"\"' }}\")]"),
121129
_ => templateText,
122130
};
123131
}

0 commit comments

Comments
 (0)