Skip to content

Commit 99b8140

Browse files
committed
If a schema is nullable, read type as an array, and remove "x-nullable"
1 parent 7118be6 commit 99b8140

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

src/Microsoft.OpenApi/Models/OpenApiSchema.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -553,10 +553,6 @@ public void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
553553
writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false);
554554

555555
// extensions
556-
if (Extensions.ContainsKey(OpenApiConstants.NullableExtension))
557-
{
558-
Extensions.Remove(OpenApiConstants.NullableExtension);
559-
}
560556
writer.WriteExtensions(Extensions, OpenApiSpecVersion.OpenApi3_0);
561557

562558
writer.WriteEndObject();

src/Microsoft.OpenApi/Reader/V31/OpenApiSchemaDeserializer.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,14 @@ internal static partial class OpenApiV31Deserializer
182182
},
183183
{
184184
"nullable",
185-
(o, n, _) => o.Nullable = bool.Parse(n.GetScalarValue())
185+
(o, n, _) =>
186+
{
187+
var nullable = bool.Parse(n.GetScalarValue());
188+
if (nullable) // if nullable, convert type into an array of type and null
189+
{
190+
o.Type = new string[]{o.Type.ToString(), OpenApiConstants.Null};
191+
}
192+
}
186193
},
187194
{
188195
"discriminator",
@@ -242,6 +249,13 @@ public static OpenApiSchema LoadSchema(ParseNode node, OpenApiDocument hostDocum
242249
propertyNode.ParseField(schema, _openApiSchemaFixedFields, _openApiSchemaPatternFields);
243250
}
244251

252+
if (schema.Extensions.ContainsKey(OpenApiConstants.NullableExtension))
253+
{
254+
var type = schema.Type;
255+
schema.Type = new string[] {(string)type, OpenApiConstants.Null};
256+
schema.Extensions.Remove(OpenApiConstants.NullableExtension);
257+
}
258+
245259
return schema;
246260
}
247261
}

0 commit comments

Comments
 (0)