Skip to content

Commit a278267

Browse files
committed
Use the extension method from JsonSchema.NET to get a dicriminator object from the schema and serialize it
1 parent 85a2b54 commit a278267

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,9 +348,9 @@ private static JsonSchema CopySchema(JsonSchema schema, JsonSchema newSchema)
348348
{
349349
schemaBuilder.MinProperties(minProperties);
350350
}
351-
if (schema.GetDiscriminator() == null && newSchema.GetOpenApiDiscriminator() is { } discriminator)
351+
if (schema.GetDiscriminator() == null && newSchema.GetDiscriminator() is { } discriminator)
352352
{
353-
schemaBuilder.Discriminator(discriminator);
353+
schemaBuilder.Discriminator(discriminator.PropertyName, discriminator.Mapping, discriminator.Extensions);
354354
}
355355
if (schema.GetOpenApiExternalDocs() == null && newSchema.GetOpenApiExternalDocs() is { } externalDocs)
356356
{

src/Microsoft.OpenApi/Validations/Rules/JsonSchemaRules.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ public static class JsonSchemaRules
8484
// discriminator
8585
context.Enter("discriminator");
8686

87-
if (jsonSchema.GetRef() != null && jsonSchema.GetOpenApiDiscriminator() != null)
87+
if (jsonSchema.GetRef() != null && jsonSchema.GetDiscriminator() != null)
8888
{
89-
var discriminatorName = jsonSchema.GetOpenApiDiscriminator()?.PropertyName;
89+
var discriminatorName = jsonSchema.GetDiscriminator()?.PropertyName;
9090

9191
if (!ValidateChildSchemaAgainstDiscriminator(jsonSchema, discriminatorName))
9292
{

src/Microsoft.OpenApi/Writers/OpenApiWriterBase.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,25 @@ public void WriteJsonSchemaWithoutReference(IOpenApiWriter writer, JsonSchema sc
574574
writer.WriteProperty(OpenApiConstants.Nullable, schema.GetNullable(), false);
575575

576576
// discriminator
577-
writer.WriteOptionalObject(OpenApiConstants.Discriminator, schema.GetOpenApiDiscriminator(), (w, d) => d.SerializeAsV3(w));
577+
var discriminator = schema.GetDiscriminator();
578+
if (discriminator != null)
579+
{
580+
writer.WriteStartObject();
581+
582+
// propertyName
583+
writer.WriteProperty(OpenApiConstants.PropertyName, discriminator.PropertyName);
584+
585+
// mapping
586+
writer.WriteOptionalMap(OpenApiConstants.Mapping, (IDictionary<string, string>)discriminator.Mapping, (w, s) => w.WriteValue(s));
587+
588+
if (version == OpenApiSpecVersion.OpenApi3_1 && discriminator.Extensions.Any())
589+
{
590+
// extensions
591+
writer.WriteExtensions((IDictionary<string, Interfaces.IOpenApiExtension>)discriminator.Extensions, OpenApiSpecVersion.OpenApi3_1);
592+
}
593+
594+
writer.WriteEndObject();
595+
}
578596

579597
// readOnly
580598
writer.WriteProperty(OpenApiConstants.ReadOnly, schema.GetReadOnly(), false);

0 commit comments

Comments
 (0)