diff --git a/bin/configs/csharp-generichost-net10-oneOf.yaml b/bin/configs/csharp-generichost-net10-oneOf.yaml index 333f4f1824e5..664abc4fb929 100644 --- a/bin/configs/csharp-generichost-net10-oneOf.yaml +++ b/bin/configs/csharp-generichost-net10-oneOf.yaml @@ -2,7 +2,7 @@ generatorName: csharp outputDir: samples/client/petstore/csharp/generichost/net10/OneOf inputSpec: modules/openapi-generator/src/test/resources/3_0/oneOf.yaml -templateDir: modules/openapi-generator/src/main/resources/csharp +templateDir: modules/openapi-generator/src/test/resources/3_0/csharp/oneof-runtime additionalProperties: packageGuid: '{321C8C3F-0156-40C1-AE42-D59761FB9B6C}' useCompareNetObjects: true @@ -14,3 +14,7 @@ additionalProperties: operationParameterSorting: alphabetical treatWarningsAsErrors: true warningsNotAsErrors: CS0612 + +files: + OneOfSerializationRegressionTests.cs: + destinationFilename: src/Org.OpenAPITools.Test/Model/OneOfSerializationRegressionTests.cs diff --git a/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/JsonConverter.mustache b/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/JsonConverter.mustache index e25293818a3a..b00a6c62b2bc 100644 --- a/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/JsonConverter.mustache +++ b/modules/openapi-generator/src/main/resources/csharp/libraries/generichost/JsonConverter.mustache @@ -420,6 +420,43 @@ {{/model.discriminator}} {{^model.discriminator}} {{#composedSchemas}} + {{#oneOf}} + {{#-first}} + bool oneOfValueWritten = false; + {{/-first}} + {{^vendorExtensions.x-duplicated-data-type}} + {{^isPrimitiveType}} + {{^isArray}} + {{^isMap}} + if ({{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}} != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for {{model.classname}}."); + oneOfValueWritten = true; + var variant = {{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new {{baseType}}JsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + {{/isMap}} + {{/isArray}} + {{/isPrimitiveType}} + {{/vendorExtensions.x-duplicated-data-type}} + {{#-last}} + _ = oneOfValueWritten; + {{/-last}} + {{/oneOf}} {{#anyOf}} if ({{#lambda.joinWithAmpersand}}{{^required}}{{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}Option.IsSet {{/required}}{{#lambda.camelcase_sanitize_param}}{{model.classname}}{{/lambda.camelcase_sanitize_param}}.{{name}}{{^required}}Option.Value{{/required}} != null{{/lambda.joinWithAmpersand}}) {{#isPrimitiveType}} diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharpnetcore/CSharpGenericHostOneOfSerializationTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharpnetcore/CSharpGenericHostOneOfSerializationTest.java new file mode 100644 index 000000000000..6be5763e6070 --- /dev/null +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharpnetcore/CSharpGenericHostOneOfSerializationTest.java @@ -0,0 +1,32 @@ +/* + * Copyright 2026 OpenAPI-Generator Contributors (https://openapi-generator.tech) + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.openapitools.codegen.csharpnetcore; + +import org.openapitools.codegen.DefaultGenerator; +import org.openapitools.codegen.config.CodegenConfigurator; +import org.testng.annotations.Test; + +import java.nio.file.Path; + +import static org.openapitools.codegen.TestUtils.assertFileContains; +import static org.openapitools.codegen.TestUtils.newTempFolder; + +public class CSharpGenericHostOneOfSerializationTest { + @Test + public void testObjectOneOfWithoutDiscriminatorWritesVariant() throws Exception { + Path output = newTempFolder(); + CodegenConfigurator config = new CodegenConfigurator().setGeneratorName("csharp").setLibrary("generichost") + .setInputSpec("src/test/resources/3_0/csharp/oneof-object-serialization.yaml") + .setOutputDir(output.toString()).addAdditionalProperty("packageName", "OneOfRepro"); + new DefaultGenerator().opts(config.toClientOptInput()).generate(); + assertFileContains(output.resolve("src/OneOfRepro/Model/Entry.cs"), + "if (entry.FileEntry != null)", + "JsonSerializer.Serialize(variant, variant.GetType(), variantOptions)", + "if (entry.FolderEntry != null)", + "Multiple oneOf variants are set for Entry."); + } +} diff --git a/modules/openapi-generator/src/test/resources/3_0/csharp/oneof-object-serialization.yaml b/modules/openapi-generator/src/test/resources/3_0/csharp/oneof-object-serialization.yaml new file mode 100644 index 000000000000..f95ff7beb9bd --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/csharp/oneof-object-serialization.yaml @@ -0,0 +1,27 @@ +openapi: 3.0.3 +info: + title: oneOf reproduction + version: 1.0.0 +paths: {} +components: + schemas: + Entry: + oneOf: + - $ref: '#/components/schemas/FileEntry' + - $ref: '#/components/schemas/FolderEntry' + FileEntry: + type: object + required: [name, size] + properties: + name: + type: string + size: + type: integer + FolderEntry: + type: object + required: [name, id] + properties: + name: + type: string + id: + type: string diff --git a/modules/openapi-generator/src/test/resources/3_0/csharp/oneof-runtime/OneOfSerializationRegressionTests.cs b/modules/openapi-generator/src/test/resources/3_0/csharp/oneof-runtime/OneOfSerializationRegressionTests.cs new file mode 100644 index 000000000000..5d63334951e2 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/csharp/oneof-runtime/OneOfSerializationRegressionTests.cs @@ -0,0 +1,106 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; +using Xunit; + +namespace Org.OpenAPITools.Test.Model +{ + public class OneOfSerializationRegressionTests + { + [Fact] + public void WritesActiveObjectVariantAndWrapperProperties() + { + JsonSerializerOptions? options = null; + new HostConfiguration(new ServiceCollection()).ConfigureJsonOptions(value => options = value); + Assert.NotNull(options); + Fruit fruit = JsonSerializer.Deserialize("{\"kind\":\"gala\",\"color\":\"red\"}", options)!; + Assert.NotNull(fruit.Apple); + using (JsonDocument json = JsonDocument.Parse(JsonSerializer.Serialize(fruit, options))) + { + Assert.Equal("gala", json.RootElement.GetProperty("kind").GetString()); + Assert.Equal("red", json.RootElement.GetProperty("color").GetString()); + } + + fruit.Apple = null; + fruit.Banana = new Banana { Count = 2 }; + using (JsonDocument json = JsonDocument.Parse(JsonSerializer.Serialize(fruit, options))) + { + Assert.Equal(2, json.RootElement.GetProperty("count").GetInt32()); + Assert.Equal("red", json.RootElement.GetProperty("color").GetString()); + } + } + + private static Fruit CreateFruit() + { + JsonSerializerOptions? options = null; + new HostConfiguration(new ServiceCollection()).ConfigureJsonOptions(value => options = value); + return JsonSerializer.Deserialize("{\"kind\":\"gala\"}", options!)!; + } + + [Fact] + public void RejectsMultipleVariants() + { + Fruit fruit = CreateFruit(); + fruit.Banana = new Banana { Count = 2 }; + var options = new JsonSerializerOptions(); + options.Converters.Add(new FruitJsonConverter()); + Assert.Throws(() => JsonSerializer.Serialize(fruit, options)); + } + + [Fact] + public void UsesGeneratedVariantConverterWhenNotRegistered() + { + Fruit fruit = CreateFruit(); + var options = new JsonSerializerOptions(); + options.Converters.Add(new FruitJsonConverter()); + using JsonDocument json = JsonDocument.Parse(JsonSerializer.Serialize(fruit, options)); + Assert.Equal("gala", json.RootElement.GetProperty("kind").GetString()); + } + + [Fact] + public void UsesCustomVariantConverter() + { + Fruit fruit = CreateFruit(); + var options = new JsonSerializerOptions(); + options.Converters.Add(new FruitJsonConverter()); + options.Converters.Add(new CustomAppleConverter()); + using JsonDocument json = JsonDocument.Parse(JsonSerializer.Serialize(fruit, options)); + Assert.Equal("custom", json.RootElement.GetProperty("kind").GetString()); + } + + [Fact] + public void UsesDerivedVariantConverter() + { + Fruit fruit = CreateFruit(); + fruit.Apple = new FancyApple(); + var options = new JsonSerializerOptions(); + options.Converters.Add(new FruitJsonConverter()); + options.Converters.Add(new FancyAppleConverter()); + using JsonDocument json = JsonDocument.Parse(JsonSerializer.Serialize(fruit, options)); + Assert.Equal("fancy", json.RootElement.GetProperty("extra").GetString()); + } + + private sealed class CustomAppleConverter : JsonConverter + { + public override Apple Read(ref Utf8JsonReader reader, Type type, JsonSerializerOptions options) => throw new NotSupportedException(); + public override void Write(Utf8JsonWriter writer, Apple value, JsonSerializerOptions options) + { + writer.WriteStartObject(); writer.WriteString("kind", "custom"); writer.WriteEndObject(); + } + } + + private sealed class FancyApple : Apple { } + + private sealed class FancyAppleConverter : JsonConverter + { + public override FancyApple Read(ref Utf8JsonReader reader, Type type, JsonSerializerOptions options) => throw new NotSupportedException(); + public override void Write(Utf8JsonWriter writer, FancyApple value, JsonSerializerOptions options) + { + writer.WriteStartObject(); writer.WriteString("extra", "fancy"); writer.WriteEndObject(); + } + } + } +} diff --git a/samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/OneOfNullableTest.cs b/samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/OneOfNullableTest.cs index e76a910a98a3..942e0bd9921a 100644 --- a/samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/OneOfNullableTest.cs +++ b/samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/OneOfNullableTest.cs @@ -180,6 +180,8 @@ public override void Write(Utf8JsonWriter writer, OneOfNullableTest oneOfNullabl { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfNullableTest, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/ParentWithPluralOneOfPropertyNumber.cs b/samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/ParentWithPluralOneOfPropertyNumber.cs index 3a399c5024a7..ded7d497b04b 100644 --- a/samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/ParentWithPluralOneOfPropertyNumber.cs +++ b/samples/client/petstore/csharp/generichost/latest/AnnotatedEnum/src/Org.OpenAPITools/Model/ParentWithPluralOneOfPropertyNumber.cs @@ -179,6 +179,8 @@ public override void Write(Utf8JsonWriter writer, ParentWithPluralOneOfPropertyN { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, parentWithPluralOneOfPropertyNumber, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/latest/OneOfList/src/Org.OpenAPITools/Model/OneOfArrayRequest.cs b/samples/client/petstore/csharp/generichost/latest/OneOfList/src/Org.OpenAPITools/Model/OneOfArrayRequest.cs index 5234000d9fa2..45a1061993aa 100644 --- a/samples/client/petstore/csharp/generichost/latest/OneOfList/src/Org.OpenAPITools/Model/OneOfArrayRequest.cs +++ b/samples/client/petstore/csharp/generichost/latest/OneOfList/src/Org.OpenAPITools/Model/OneOfArrayRequest.cs @@ -179,6 +179,8 @@ public override void Write(Utf8JsonWriter writer, OneOfArrayRequest oneOfArrayRe { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfArrayRequest, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/Fruit.cs index 243215e72240..236a922f0a50 100644 --- a/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/Fruit.cs @@ -205,6 +205,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/FruitReq.cs index b28dc4d8ed56..a51ce8ec8b10 100644 --- a/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/FruitReq.cs @@ -179,6 +179,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 9dc1bb0487da..4081d0deb485 100644 --- a/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -245,6 +245,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/OneOfString.cs index 7cc7a1520b56..cc39edb01647 100644 --- a/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/OneOfString.cs @@ -141,6 +141,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index eb6f31431a7a..508e225041e6 100644 --- a/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/latest/UseDateTimeOffset/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -223,6 +223,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/Fruit.cs index 784b5dc9af79..a66ccc841790 100644 --- a/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net10/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs index a4308c32d8b6..da3ff8c39e18 100644 --- a/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs @@ -206,6 +206,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs index d561a09a3804..9a06acffd3d1 100644 --- a/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs @@ -180,6 +180,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 6811c075b9ca..f7c8e2a305df 100644 --- a/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -253,6 +253,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs index 29000bb7adad..38bb5a08d5b6 100644 --- a/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs @@ -149,6 +149,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index c5c884525043..65bdbc127569 100644 --- a/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net10/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -231,6 +231,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/OneOf/.openapi-generator/FILES b/samples/client/petstore/csharp/generichost/net10/OneOf/.openapi-generator/FILES index 86967a0a29dd..d798e4dd1593 100644 --- a/samples/client/petstore/csharp/generichost/net10/OneOf/.openapi-generator/FILES +++ b/samples/client/petstore/csharp/generichost/net10/OneOf/.openapi-generator/FILES @@ -11,6 +11,7 @@ docs/models/Orange.md docs/scripts/git_push.ps1 docs/scripts/git_push.sh src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs +src/Org.OpenAPITools.Test/Model/OneOfSerializationRegressionTests.cs src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj src/Org.OpenAPITools.Test/README.md src/Org.OpenAPITools/Api/DefaultApi.cs diff --git a/samples/client/petstore/csharp/generichost/net10/OneOf/src/Org.OpenAPITools.Test/Model/OneOfSerializationRegressionTests.cs b/samples/client/petstore/csharp/generichost/net10/OneOf/src/Org.OpenAPITools.Test/Model/OneOfSerializationRegressionTests.cs new file mode 100644 index 000000000000..5d63334951e2 --- /dev/null +++ b/samples/client/petstore/csharp/generichost/net10/OneOf/src/Org.OpenAPITools.Test/Model/OneOfSerializationRegressionTests.cs @@ -0,0 +1,106 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; +using Org.OpenAPITools.Client; +using Org.OpenAPITools.Model; +using Xunit; + +namespace Org.OpenAPITools.Test.Model +{ + public class OneOfSerializationRegressionTests + { + [Fact] + public void WritesActiveObjectVariantAndWrapperProperties() + { + JsonSerializerOptions? options = null; + new HostConfiguration(new ServiceCollection()).ConfigureJsonOptions(value => options = value); + Assert.NotNull(options); + Fruit fruit = JsonSerializer.Deserialize("{\"kind\":\"gala\",\"color\":\"red\"}", options)!; + Assert.NotNull(fruit.Apple); + using (JsonDocument json = JsonDocument.Parse(JsonSerializer.Serialize(fruit, options))) + { + Assert.Equal("gala", json.RootElement.GetProperty("kind").GetString()); + Assert.Equal("red", json.RootElement.GetProperty("color").GetString()); + } + + fruit.Apple = null; + fruit.Banana = new Banana { Count = 2 }; + using (JsonDocument json = JsonDocument.Parse(JsonSerializer.Serialize(fruit, options))) + { + Assert.Equal(2, json.RootElement.GetProperty("count").GetInt32()); + Assert.Equal("red", json.RootElement.GetProperty("color").GetString()); + } + } + + private static Fruit CreateFruit() + { + JsonSerializerOptions? options = null; + new HostConfiguration(new ServiceCollection()).ConfigureJsonOptions(value => options = value); + return JsonSerializer.Deserialize("{\"kind\":\"gala\"}", options!)!; + } + + [Fact] + public void RejectsMultipleVariants() + { + Fruit fruit = CreateFruit(); + fruit.Banana = new Banana { Count = 2 }; + var options = new JsonSerializerOptions(); + options.Converters.Add(new FruitJsonConverter()); + Assert.Throws(() => JsonSerializer.Serialize(fruit, options)); + } + + [Fact] + public void UsesGeneratedVariantConverterWhenNotRegistered() + { + Fruit fruit = CreateFruit(); + var options = new JsonSerializerOptions(); + options.Converters.Add(new FruitJsonConverter()); + using JsonDocument json = JsonDocument.Parse(JsonSerializer.Serialize(fruit, options)); + Assert.Equal("gala", json.RootElement.GetProperty("kind").GetString()); + } + + [Fact] + public void UsesCustomVariantConverter() + { + Fruit fruit = CreateFruit(); + var options = new JsonSerializerOptions(); + options.Converters.Add(new FruitJsonConverter()); + options.Converters.Add(new CustomAppleConverter()); + using JsonDocument json = JsonDocument.Parse(JsonSerializer.Serialize(fruit, options)); + Assert.Equal("custom", json.RootElement.GetProperty("kind").GetString()); + } + + [Fact] + public void UsesDerivedVariantConverter() + { + Fruit fruit = CreateFruit(); + fruit.Apple = new FancyApple(); + var options = new JsonSerializerOptions(); + options.Converters.Add(new FruitJsonConverter()); + options.Converters.Add(new FancyAppleConverter()); + using JsonDocument json = JsonDocument.Parse(JsonSerializer.Serialize(fruit, options)); + Assert.Equal("fancy", json.RootElement.GetProperty("extra").GetString()); + } + + private sealed class CustomAppleConverter : JsonConverter + { + public override Apple Read(ref Utf8JsonReader reader, Type type, JsonSerializerOptions options) => throw new NotSupportedException(); + public override void Write(Utf8JsonWriter writer, Apple value, JsonSerializerOptions options) + { + writer.WriteStartObject(); writer.WriteString("kind", "custom"); writer.WriteEndObject(); + } + } + + private sealed class FancyApple : Apple { } + + private sealed class FancyAppleConverter : JsonConverter + { + public override FancyApple Read(ref Utf8JsonReader reader, Type type, JsonSerializerOptions options) => throw new NotSupportedException(); + public override void Write(Utf8JsonWriter writer, FancyApple value, JsonSerializerOptions options) + { + writer.WriteStartObject(); writer.WriteString("extra", "fancy"); writer.WriteEndObject(); + } + } + } +} diff --git a/samples/client/petstore/csharp/generichost/net10/OneOf/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net10/OneOf/src/Org.OpenAPITools/Model/Fruit.cs index ba9946bc000b..4bca9576a162 100644 --- a/samples/client/petstore/csharp/generichost/net10/OneOf/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net10/OneOf/src/Org.OpenAPITools/Model/Fruit.cs @@ -237,6 +237,71 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Orange != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Orange; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new OrangeJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/Fruit.cs index 784b5dc9af79..a66ccc841790 100644 --- a/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net10/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs index faa29c9f5d95..606bbcf0e7a5 100644 --- a/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs @@ -207,6 +207,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs index 055e99668c60..b362945b4468 100644 --- a/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs @@ -181,6 +181,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 8ef84d0e9496..c34935f38ba0 100644 --- a/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -254,6 +254,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs index a82cef00ef30..40dcc2d08de6 100644 --- a/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs @@ -150,6 +150,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index bb23a0e706e9..c4063c3be37d 100644 --- a/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net10/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -232,6 +232,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/Fruit.cs index ba7eb93c2ec2..1c250cd67e61 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Fruit.cs index 0d2df9da3d80..0a248b0cf693 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/OneOf/src/Org.OpenAPITools/Model/Fruit.cs @@ -235,6 +235,71 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Orange != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Orange; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new OrangeJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/Fruit.cs index ba7eb93c2ec2..1c250cd67e61 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net4.7/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/Fruit.cs index ba7eb93c2ec2..1c250cd67e61 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs index 0d2df9da3d80..0a248b0cf693 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs @@ -235,6 +235,71 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Orange != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Orange; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new OrangeJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/Fruit.cs index ba7eb93c2ec2..1c250cd67e61 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net4.8/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/Fruit.cs index 784b5dc9af79..a66ccc841790 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net8/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs index a4308c32d8b6..da3ff8c39e18 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs @@ -206,6 +206,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs index d561a09a3804..9a06acffd3d1 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs @@ -180,6 +180,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 6811c075b9ca..f7c8e2a305df 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -253,6 +253,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs index 29000bb7adad..38bb5a08d5b6 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs @@ -149,6 +149,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index c5c884525043..65bdbc127569 100644 --- a/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net8/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -231,6 +231,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs index ba9946bc000b..4bca9576a162 100644 --- a/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net8/OneOf/src/Org.OpenAPITools/Model/Fruit.cs @@ -237,6 +237,71 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Orange != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Orange; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new OrangeJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/Fruit.cs index 784b5dc9af79..a66ccc841790 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net8/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs index faa29c9f5d95..606bbcf0e7a5 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs @@ -207,6 +207,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs index 055e99668c60..b362945b4468 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs @@ -181,6 +181,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 8ef84d0e9496..c34935f38ba0 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -254,6 +254,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs index a82cef00ef30..40dcc2d08de6 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs @@ -150,6 +150,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index bb23a0e706e9..c4063c3be37d 100644 --- a/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net8/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -232,6 +232,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/Fruit.cs index 784b5dc9af79..a66ccc841790 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net9/FormModels/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs index a4308c32d8b6..da3ff8c39e18 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/Fruit.cs @@ -206,6 +206,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs index d561a09a3804..9a06acffd3d1 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/FruitReq.cs @@ -180,6 +180,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 6811c075b9ca..f7c8e2a305df 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -253,6 +253,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs index 29000bb7adad..38bb5a08d5b6 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/OneOfString.cs @@ -149,6 +149,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index c5c884525043..65bdbc127569 100644 --- a/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net9/NullReferenceTypes/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -231,6 +231,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Fruit.cs index ba9946bc000b..4bca9576a162 100644 --- a/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net9/OneOf/src/Org.OpenAPITools/Model/Fruit.cs @@ -237,6 +237,71 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Orange != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Orange; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new OrangeJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/Fruit.cs index 784b5dc9af79..a66ccc841790 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net9/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs index faa29c9f5d95..606bbcf0e7a5 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/Fruit.cs @@ -207,6 +207,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs index 055e99668c60..b362945b4468 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/FruitReq.cs @@ -181,6 +181,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 8ef84d0e9496..c34935f38ba0 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -254,6 +254,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs index a82cef00ef30..40dcc2d08de6 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/OneOfString.cs @@ -150,6 +150,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index bb23a0e706e9..c4063c3be37d 100644 --- a/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/net9/SourceGeneration/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -232,6 +232,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/Fruit.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/Fruit.cs index ba7eb93c2ec2..1c250cd67e61 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/Fruit.cs +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/Fruit.cs @@ -204,6 +204,50 @@ public override void Write(Utf8JsonWriter writer, Fruit fruit, JsonSerializerOpt { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruit.Apple != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Apple; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruit.Banana != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for Fruit."); + oneOfValueWritten = true; + var variant = fruit.Banana; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruit, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs index 88686dd4a32e..ebcf06bc2bbb 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/FruitReq.cs @@ -178,6 +178,50 @@ public override void Write(Utf8JsonWriter writer, FruitReq fruitReq, JsonSeriali { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (fruitReq.AppleReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.AppleReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new AppleReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + if (fruitReq.BananaReq != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for FruitReq."); + oneOfValueWritten = true; + var variant = fruitReq.BananaReq; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new BananaReqJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, fruitReq, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs index 65ed21f4c667..03d79915715d 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/MixedOneOfContent.cs @@ -251,6 +251,29 @@ public override void Write(Utf8JsonWriter writer, MixedOneOfContent mixedOneOfCo { writer.WriteStartObject(); + bool oneOfValueWritten = false; + if (mixedOneOfContent.MixedSubId != null) + { + if (oneOfValueWritten) + throw new JsonException("Multiple oneOf variants are set for MixedOneOfContent."); + oneOfValueWritten = true; + var variant = mixedOneOfContent.MixedSubId; + var variantOptions = jsonSerializerOptions; + if (!jsonSerializerOptions.Converters.Any(c => c.CanConvert(variant.GetType()))) + { + variantOptions = new JsonSerializerOptions(jsonSerializerOptions); + variantOptions.Converters.Add(new MixedSubIdJsonConverter()); + } + using (JsonDocument document = JsonDocument.Parse(JsonSerializer.Serialize(variant, variant.GetType(), variantOptions))) + { + if (document.RootElement.ValueKind != JsonValueKind.Object) + throw new JsonException("The oneOf variant must serialize as an object."); + foreach (JsonProperty property in document.RootElement.EnumerateObject()) + property.WriteTo(writer); + } + } + + _ = oneOfValueWritten; WriteProperties(writer, mixedOneOfContent, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs index f7348b0bcbca..0db724311b75 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/OneOfString.cs @@ -147,6 +147,8 @@ public override void Write(Utf8JsonWriter writer, OneOfString oneOfString, JsonS { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, oneOfString, jsonSerializerOptions); writer.WriteEndObject(); } diff --git a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs index affea08f6f8a..213650691ad3 100644 --- a/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs +++ b/samples/client/petstore/csharp/generichost/standard2.0/Petstore/src/Org.OpenAPITools/Model/PolymorphicProperty.cs @@ -229,6 +229,8 @@ public override void Write(Utf8JsonWriter writer, PolymorphicProperty polymorphi { writer.WriteStartObject(); + bool oneOfValueWritten = false; + _ = oneOfValueWritten; WriteProperties(writer, polymorphicProperty, jsonSerializerOptions); writer.WriteEndObject(); }