Skip to content

Commit 383ea38

Browse files
Copilotalexaka1
andcommitted
fix: nullable enum converters - use WriteNullValue() and handle null token in Read
Nullable string enum Write now calls WriteNullValue() when HasValue is false, instead of writing the string literal "null". Nullable enum Read (all types) now checks reader.TokenType == JsonTokenType.Null and returns null before attempting to read the value. Previously this check was only applied to non-string enum types. Co-authored-by: alexaka1 <22166651+alexaka1@users.noreply.github.com>
1 parent d8ab8ee commit 383ea38

192 files changed

Lines changed: 1341 additions & 197 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/openapi-generator/src/main/resources/csharp/modelEnum.mustache

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,9 @@
234234
/// <returns></returns>
235235
public override {{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
236236
{
237-
{{^isString}}
238237
if (reader.TokenType == JsonTokenType.Null)
239238
return null;
240239
241-
{{/isString}}
242240
{{#isInteger}}
243241
string rawValue = reader.{{>EnumJsonReaderMethod}}().ToString();
244242
{{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}? result = {{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}ValueConverter.FromStringOrDefault(rawValue);
@@ -296,15 +294,15 @@
296294
/// <param name="options"></param>
297295
public override void Write(Utf8JsonWriter writer, {{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}? {{#lambda.camelcase_sanitize_param}}{{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{/lambda.camelcase_sanitize_param}}, JsonSerializerOptions options)
298296
{
299-
{{^isString}}
300297
if ({{#lambda.camelcase_sanitize_param}}{{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{/lambda.camelcase_sanitize_param}}.HasValue)
298+
{{^isString}}
301299
writer.WriteNumberValue({{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}ValueConverter.ToJsonValue({{#lambda.camelcase_sanitize_param}}{{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{/lambda.camelcase_sanitize_param}}.Value));
302-
else
303-
writer.WriteNullValue();
304300
{{/isString}}
305301
{{#isString}}
306-
writer.WriteStringValue({{#lambda.camelcase_sanitize_param}}{{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{/lambda.camelcase_sanitize_param}}.HasValue ? {{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}ValueConverter.ToJsonValue({{#lambda.camelcase_sanitize_param}}{{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{/lambda.camelcase_sanitize_param}}.Value).ToString() : "null");
302+
writer.WriteStringValue({{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}ValueConverter.ToJsonValue({{#lambda.camelcase_sanitize_param}}{{datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{/lambda.camelcase_sanitize_param}}.Value).ToString());
307303
{{/isString}}
304+
else
305+
writer.WriteNullValue();
308306
}
309307
}
310308
{{/useGenericHost}}

samples/client/petstore/csharp/generichost/latest/ComposedEnum/src/Org.OpenAPITools/Model/AreaCode.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,9 @@ public class AreaCodeNullableJsonConverter : JsonConverter<AreaCode?>
177177
/// <returns></returns>
178178
public override AreaCode? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
179179
{
180+
if (reader.TokenType == JsonTokenType.Null)
181+
return null;
182+
180183
string? rawValue = reader.GetString();
181184

182185
AreaCode? result = rawValue == null
@@ -197,7 +200,10 @@ public class AreaCodeNullableJsonConverter : JsonConverter<AreaCode?>
197200
/// <param name="options"></param>
198201
public override void Write(Utf8JsonWriter writer, AreaCode? areaCode, JsonSerializerOptions options)
199202
{
200-
writer.WriteStringValue(areaCode.HasValue ? AreaCodeValueConverter.ToJsonValue(areaCode.Value).ToString() : "null");
203+
if (areaCode.HasValue)
204+
writer.WriteStringValue(AreaCodeValueConverter.ToJsonValue(areaCode.Value).ToString());
205+
else
206+
writer.WriteNullValue();
201207
}
202208
}
203209
}

samples/client/petstore/csharp/generichost/latest/ComposedEnum/src/Org.OpenAPITools/Model/MarineAreaCode.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ public class MarineAreaCodeNullableJsonConverter : JsonConverter<MarineAreaCode?
149149
/// <returns></returns>
150150
public override MarineAreaCode? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
151151
{
152+
if (reader.TokenType == JsonTokenType.Null)
153+
return null;
154+
152155
string? rawValue = reader.GetString();
153156

154157
MarineAreaCode? result = rawValue == null
@@ -169,7 +172,10 @@ public class MarineAreaCodeNullableJsonConverter : JsonConverter<MarineAreaCode?
169172
/// <param name="options"></param>
170173
public override void Write(Utf8JsonWriter writer, MarineAreaCode? marineAreaCode, JsonSerializerOptions options)
171174
{
172-
writer.WriteStringValue(marineAreaCode.HasValue ? MarineAreaCodeValueConverter.ToJsonValue(marineAreaCode.Value).ToString() : "null");
175+
if (marineAreaCode.HasValue)
176+
writer.WriteStringValue(MarineAreaCodeValueConverter.ToJsonValue(marineAreaCode.Value).ToString());
177+
else
178+
writer.WriteNullValue();
173179
}
174180
}
175181
}

samples/client/petstore/csharp/generichost/latest/ComposedEnum/src/Org.OpenAPITools/Model/StateTerritoryCode.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ public class StateTerritoryCodeNullableJsonConverter : JsonConverter<StateTerrit
149149
/// <returns></returns>
150150
public override StateTerritoryCode? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
151151
{
152+
if (reader.TokenType == JsonTokenType.Null)
153+
return null;
154+
152155
string? rawValue = reader.GetString();
153156

154157
StateTerritoryCode? result = rawValue == null
@@ -169,7 +172,10 @@ public class StateTerritoryCodeNullableJsonConverter : JsonConverter<StateTerrit
169172
/// <param name="options"></param>
170173
public override void Write(Utf8JsonWriter writer, StateTerritoryCode? stateTerritoryCode, JsonSerializerOptions options)
171174
{
172-
writer.WriteStringValue(stateTerritoryCode.HasValue ? StateTerritoryCodeValueConverter.ToJsonValue(stateTerritoryCode.Value).ToString() : "null");
175+
if (stateTerritoryCode.HasValue)
176+
writer.WriteStringValue(StateTerritoryCodeValueConverter.ToJsonValue(stateTerritoryCode.Value).ToString());
177+
else
178+
writer.WriteNullValue();
173179
}
174180
}
175181
}

samples/client/petstore/csharp/generichost/latest/InlineEnumAnyOf/src/Org.OpenAPITools/Model/IconsSizeParameterAnyOf.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,9 @@ public class IconsSizeParameterAnyOfNullableJsonConverter : JsonConverter<IconsS
163163
/// <returns></returns>
164164
public override IconsSizeParameterAnyOf? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
165165
{
166+
if (reader.TokenType == JsonTokenType.Null)
167+
return null;
168+
166169
string? rawValue = reader.GetString();
167170

168171
IconsSizeParameterAnyOf? result = rawValue == null
@@ -183,7 +186,10 @@ public class IconsSizeParameterAnyOfNullableJsonConverter : JsonConverter<IconsS
183186
/// <param name="options"></param>
184187
public override void Write(Utf8JsonWriter writer, IconsSizeParameterAnyOf? iconsSizeParameterAnyOf, JsonSerializerOptions options)
185188
{
186-
writer.WriteStringValue(iconsSizeParameterAnyOf.HasValue ? IconsSizeParameterAnyOfValueConverter.ToJsonValue(iconsSizeParameterAnyOf.Value).ToString() : "null");
189+
if (iconsSizeParameterAnyOf.HasValue)
190+
writer.WriteStringValue(IconsSizeParameterAnyOfValueConverter.ToJsonValue(iconsSizeParameterAnyOf.Value).ToString());
191+
else
192+
writer.WriteNullValue();
187193
}
188194
}
189195
}

samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/ChildCatAllOfPetType.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ public class ChildCatAllOfPetTypeNullableJsonConverter : JsonConverter<ChildCatA
134134
/// <returns></returns>
135135
public override ChildCatAllOfPetType? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
136136
{
137+
if (reader.TokenType == JsonTokenType.Null)
138+
return null;
139+
137140
string rawValue = reader.GetString();
138141

139142
ChildCatAllOfPetType? result = rawValue == null
@@ -154,7 +157,10 @@ public class ChildCatAllOfPetTypeNullableJsonConverter : JsonConverter<ChildCatA
154157
/// <param name="options"></param>
155158
public override void Write(Utf8JsonWriter writer, ChildCatAllOfPetType? childCatAllOfPetType, JsonSerializerOptions options)
156159
{
157-
writer.WriteStringValue(childCatAllOfPetType.HasValue ? ChildCatAllOfPetTypeValueConverter.ToJsonValue(childCatAllOfPetType.Value).ToString() : "null");
160+
if (childCatAllOfPetType.HasValue)
161+
writer.WriteStringValue(ChildCatAllOfPetTypeValueConverter.ToJsonValue(childCatAllOfPetType.Value).ToString());
162+
else
163+
writer.WriteNullValue();
158164
}
159165
}
160166
}

samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/CopyActivityAllOfSchema.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ public class CopyActivityAllOfSchemaNullableJsonConverter : JsonConverter<CopyAc
134134
/// <returns></returns>
135135
public override CopyActivityAllOfSchema? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
136136
{
137+
if (reader.TokenType == JsonTokenType.Null)
138+
return null;
139+
137140
string rawValue = reader.GetString();
138141

139142
CopyActivityAllOfSchema? result = rawValue == null
@@ -154,7 +157,10 @@ public class CopyActivityAllOfSchemaNullableJsonConverter : JsonConverter<CopyAc
154157
/// <param name="options"></param>
155158
public override void Write(Utf8JsonWriter writer, CopyActivityAllOfSchema? copyActivityAllOfSchema, JsonSerializerOptions options)
156159
{
157-
writer.WriteStringValue(copyActivityAllOfSchema.HasValue ? CopyActivityAllOfSchemaValueConverter.ToJsonValue(copyActivityAllOfSchema.Value).ToString() : "null");
160+
if (copyActivityAllOfSchema.HasValue)
161+
writer.WriteStringValue(CopyActivityAllOfSchemaValueConverter.ToJsonValue(copyActivityAllOfSchema.Value).ToString());
162+
else
163+
writer.WriteNullValue();
158164
}
159165
}
160166
}

samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/EnumArraysArrayEnumInner.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ public class EnumArraysArrayEnumInnerNullableJsonConverter : JsonConverter<EnumA
148148
/// <returns></returns>
149149
public override EnumArraysArrayEnumInner? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
150150
{
151+
if (reader.TokenType == JsonTokenType.Null)
152+
return null;
153+
151154
string rawValue = reader.GetString();
152155

153156
EnumArraysArrayEnumInner? result = rawValue == null
@@ -168,7 +171,10 @@ public class EnumArraysArrayEnumInnerNullableJsonConverter : JsonConverter<EnumA
168171
/// <param name="options"></param>
169172
public override void Write(Utf8JsonWriter writer, EnumArraysArrayEnumInner? enumArraysArrayEnumInner, JsonSerializerOptions options)
170173
{
171-
writer.WriteStringValue(enumArraysArrayEnumInner.HasValue ? EnumArraysArrayEnumInnerValueConverter.ToJsonValue(enumArraysArrayEnumInner.Value).ToString() : "null");
174+
if (enumArraysArrayEnumInner.HasValue)
175+
writer.WriteStringValue(EnumArraysArrayEnumInnerValueConverter.ToJsonValue(enumArraysArrayEnumInner.Value).ToString());
176+
else
177+
writer.WriteNullValue();
172178
}
173179
}
174180
}

samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/EnumArraysJustSymbol.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ public class EnumArraysJustSymbolNullableJsonConverter : JsonConverter<EnumArray
148148
/// <returns></returns>
149149
public override EnumArraysJustSymbol? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
150150
{
151+
if (reader.TokenType == JsonTokenType.Null)
152+
return null;
153+
151154
string rawValue = reader.GetString();
152155

153156
EnumArraysJustSymbol? result = rawValue == null
@@ -168,7 +171,10 @@ public class EnumArraysJustSymbolNullableJsonConverter : JsonConverter<EnumArray
168171
/// <param name="options"></param>
169172
public override void Write(Utf8JsonWriter writer, EnumArraysJustSymbol? enumArraysJustSymbol, JsonSerializerOptions options)
170173
{
171-
writer.WriteStringValue(enumArraysJustSymbol.HasValue ? EnumArraysJustSymbolValueConverter.ToJsonValue(enumArraysJustSymbol.Value).ToString() : "null");
174+
if (enumArraysJustSymbol.HasValue)
175+
writer.WriteStringValue(EnumArraysJustSymbolValueConverter.ToJsonValue(enumArraysJustSymbol.Value).ToString());
176+
else
177+
writer.WriteNullValue();
172178
}
173179
}
174180
}

samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/EnumClass.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ public class EnumClassNullableJsonConverter : JsonConverter<EnumClass?>
162162
/// <returns></returns>
163163
public override EnumClass? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
164164
{
165+
if (reader.TokenType == JsonTokenType.Null)
166+
return null;
167+
165168
string rawValue = reader.GetString();
166169

167170
EnumClass? result = rawValue == null
@@ -182,7 +185,10 @@ public class EnumClassNullableJsonConverter : JsonConverter<EnumClass?>
182185
/// <param name="options"></param>
183186
public override void Write(Utf8JsonWriter writer, EnumClass? enumClass, JsonSerializerOptions options)
184187
{
185-
writer.WriteStringValue(enumClass.HasValue ? EnumClassValueConverter.ToJsonValue(enumClass.Value).ToString() : "null");
188+
if (enumClass.HasValue)
189+
writer.WriteStringValue(EnumClassValueConverter.ToJsonValue(enumClass.Value).ToString());
190+
else
191+
writer.WriteNullValue();
186192
}
187193
}
188194
}

0 commit comments

Comments
 (0)