[C#] Fix oneOf derserialization with additional properties (#8057)

* fix oneOf derserializaoneOf deserialization with additonal prop

* fix tests due to better handlding of additional prop
This commit is contained in:
William Cheng 2020-12-04 10:50:26 +08:00 committed by GitHub
parent b0ecaab8fb
commit bcf4f8ade6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
33 changed files with 647 additions and 95 deletions

View File

@ -28,6 +28,23 @@ namespace {{packageName}}.{{modelPackage}}
}
};
/// <summary>
/// Custom JSON serializer for objects with additional properties
/// </summary>
static public readonly JsonSerializerSettings AdditionalPropertiesSerializerSettings = new JsonSerializerSettings
{
// OpenAPI generated types generally hide default constructors.
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
MissingMemberHandling = MissingMemberHandling.Ignore,
ContractResolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy
{
OverrideSpecifiedNames = false
}
}
};
/// <summary>
/// Gets or Sets the actual instance
/// </summary>

View File

@ -112,7 +112,12 @@
{
{{#mappedModels}}
case "{{{mappingName}}}":
new{{classname}} = new {{classname}}(JsonConvert.DeserializeObject<{{{modelName}}}>(jsonString, {{classname}}.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (new{{{classname}}}.GetType().GetProperty("AdditionalProperties") == null)
{
new{{classname}} = new {{classname}}(JsonConvert.DeserializeObject<{{{modelName}}}>(jsonString, {{classname}}.SerializerSettings));
}
return new{{classname}};
{{/mappedModels}}
default:
@ -127,8 +132,13 @@
{{#oneOf}}
try
{
new{{classname}} = new {{classname}}(JsonConvert.DeserializeObject<{{{.}}}>(jsonString, {{classname}}.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (new{{{classname}}}.GetType().GetProperty("AdditionalProperties") == null)
{
new{{classname}} = new {{classname}}(JsonConvert.DeserializeObject<{{{.}}}>(jsonString, {{classname}}.SerializerSettings));
}
matchedTypes.Add("{{{.}}}");
match++;
}

View File

@ -36,6 +36,23 @@ namespace Org.OpenAPITools.Model
}
};
/// <summary>
/// Custom JSON serializer for objects with additional properties
/// </summary>
static public readonly JsonSerializerSettings AdditionalPropertiesSerializerSettings = new JsonSerializerSettings
{
// OpenAPI generated types generally hide default constructors.
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
MissingMemberHandling = MissingMemberHandling.Ignore,
ContractResolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy
{
OverrideSpecifiedNames = false
}
}
};
/// <summary>
/// Gets or Sets the actual instance
/// </summary>

View File

@ -146,8 +146,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Apple>(jsonString, Fruit.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruit.GetType().GetProperty("AdditionalProperties") == null)
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Apple>(jsonString, Fruit.SerializerSettings));
}
matchedTypes.Add("Apple");
match++;
}
@ -158,8 +163,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Banana>(jsonString, Fruit.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruit.GetType().GetProperty("AdditionalProperties") == null)
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Banana>(jsonString, Fruit.SerializerSettings));
}
matchedTypes.Add("Banana");
match++;
}

View File

@ -155,8 +155,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<AppleReq>(jsonString, FruitReq.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruitReq.GetType().GetProperty("AdditionalProperties") == null)
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<AppleReq>(jsonString, FruitReq.SerializerSettings));
}
matchedTypes.Add("AppleReq");
match++;
}
@ -167,8 +172,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<BananaReq>(jsonString, FruitReq.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruitReq.GetType().GetProperty("AdditionalProperties") == null)
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<BananaReq>(jsonString, FruitReq.SerializerSettings));
}
matchedTypes.Add("BananaReq");
match++;
}

View File

@ -174,13 +174,28 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "Pig":
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.SerializerSettings));
}
return newMammal;
case "whale":
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.SerializerSettings));
}
return newMammal;
case "zebra":
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.SerializerSettings));
}
return newMammal;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for Mammal. Possible values: Pig whale zebra", discriminatorValue));
@ -191,8 +206,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.SerializerSettings));
}
matchedTypes.Add("Pig");
match++;
}
@ -203,8 +223,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.SerializerSettings));
}
matchedTypes.Add("Whale");
match++;
}
@ -215,8 +240,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.SerializerSettings));
}
matchedTypes.Add("Zebra");
match++;
}

View File

@ -157,10 +157,20 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "Quadrilateral":
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newNullableShape.GetType().GetProperty("AdditionalProperties") == null)
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.SerializerSettings));
}
return newNullableShape;
case "Triangle":
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newNullableShape.GetType().GetProperty("AdditionalProperties") == null)
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.SerializerSettings));
}
return newNullableShape;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for NullableShape. Possible values: Quadrilateral Triangle", discriminatorValue));
@ -171,8 +181,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newNullableShape.GetType().GetProperty("AdditionalProperties") == null)
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.SerializerSettings));
}
matchedTypes.Add("Quadrilateral");
match++;
}
@ -183,8 +198,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newNullableShape.GetType().GetProperty("AdditionalProperties") == null)
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.SerializerSettings));
}
matchedTypes.Add("Triangle");
match++;
}

View File

@ -148,10 +148,20 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "BasquePig":
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newPig.GetType().GetProperty("AdditionalProperties") == null)
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.SerializerSettings));
}
return newPig;
case "DanishPig":
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newPig.GetType().GetProperty("AdditionalProperties") == null)
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.SerializerSettings));
}
return newPig;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for Pig. Possible values: BasquePig DanishPig", discriminatorValue));
@ -162,8 +172,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newPig.GetType().GetProperty("AdditionalProperties") == null)
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.SerializerSettings));
}
matchedTypes.Add("BasquePig");
match++;
}
@ -174,8 +189,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newPig.GetType().GetProperty("AdditionalProperties") == null)
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.SerializerSettings));
}
matchedTypes.Add("DanishPig");
match++;
}

View File

@ -148,10 +148,20 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "ComplexQuadrilateral":
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newQuadrilateral.GetType().GetProperty("AdditionalProperties") == null)
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
}
return newQuadrilateral;
case "SimpleQuadrilateral":
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newQuadrilateral.GetType().GetProperty("AdditionalProperties") == null)
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
}
return newQuadrilateral;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for Quadrilateral. Possible values: ComplexQuadrilateral SimpleQuadrilateral", discriminatorValue));
@ -162,8 +172,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newQuadrilateral.GetType().GetProperty("AdditionalProperties") == null)
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
}
matchedTypes.Add("ComplexQuadrilateral");
match++;
}
@ -174,8 +189,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newQuadrilateral.GetType().GetProperty("AdditionalProperties") == null)
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
}
matchedTypes.Add("SimpleQuadrilateral");
match++;
}

View File

@ -148,10 +148,20 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "Quadrilateral":
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShape.GetType().GetProperty("AdditionalProperties") == null)
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.SerializerSettings));
}
return newShape;
case "Triangle":
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShape.GetType().GetProperty("AdditionalProperties") == null)
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.SerializerSettings));
}
return newShape;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for Shape. Possible values: Quadrilateral Triangle", discriminatorValue));
@ -162,8 +172,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShape.GetType().GetProperty("AdditionalProperties") == null)
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.SerializerSettings));
}
matchedTypes.Add("Quadrilateral");
match++;
}
@ -174,8 +189,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShape.GetType().GetProperty("AdditionalProperties") == null)
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.SerializerSettings));
}
matchedTypes.Add("Triangle");
match++;
}

View File

@ -157,10 +157,20 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "Quadrilateral":
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShapeOrNull.GetType().GetProperty("AdditionalProperties") == null)
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.SerializerSettings));
}
return newShapeOrNull;
case "Triangle":
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShapeOrNull.GetType().GetProperty("AdditionalProperties") == null)
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.SerializerSettings));
}
return newShapeOrNull;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for ShapeOrNull. Possible values: Quadrilateral Triangle", discriminatorValue));
@ -171,8 +181,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShapeOrNull.GetType().GetProperty("AdditionalProperties") == null)
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.SerializerSettings));
}
matchedTypes.Add("Quadrilateral");
match++;
}
@ -183,8 +198,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShapeOrNull.GetType().GetProperty("AdditionalProperties") == null)
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.SerializerSettings));
}
matchedTypes.Add("Triangle");
match++;
}

View File

@ -174,13 +174,28 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "EquilateralTriangle":
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.SerializerSettings));
}
return newTriangle;
case "IsoscelesTriangle":
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.SerializerSettings));
}
return newTriangle;
case "ScaleneTriangle":
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.SerializerSettings));
}
return newTriangle;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for Triangle. Possible values: EquilateralTriangle IsoscelesTriangle ScaleneTriangle", discriminatorValue));
@ -191,8 +206,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.SerializerSettings));
}
matchedTypes.Add("EquilateralTriangle");
match++;
}
@ -203,8 +223,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.SerializerSettings));
}
matchedTypes.Add("IsoscelesTriangle");
match++;
}
@ -215,8 +240,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.SerializerSettings));
}
matchedTypes.Add("ScaleneTriangle");
match++;
}

View File

@ -86,7 +86,8 @@ namespace Org.OpenAPITools.Test
Assert.IsType<Banana>(f3.ActualInstance);
Fruit f4 = Fruit.FromJson("{\"origin\":\"Japan\"}");
Assert.IsType<Apple>(f4.ActualInstance);
// since banana allows additional properties, it will apple's JSON payload as well
Assert.IsType<Banana>(f4.ActualInstance);
// test custom deserializer
Fruit f5 = JsonConvert.DeserializeObject<Fruit>("{\"lengthCm\":98}");
@ -117,5 +118,18 @@ namespace Org.OpenAPITools.Test
Cat c = JsonConvert.DeserializeObject<Cat>("{\"className\":\"cat\",\"bar\":\"from json bar\"}");
Assert.Equal("from json bar", c.AdditionalProperties["bar"]);
}
/// <summary>
/// Test additonal properties
/// </summary>
[Fact]
public void TestAdditionalProperties()
{
Foo f = new Foo();
Assert.NotNull(f.GetType().GetProperty("AdditionalProperties"));
Assert.Null(f.GetType().GetProperty("unknown_property"));
}
}
}

View File

@ -36,6 +36,23 @@ namespace Org.OpenAPITools.Model
}
};
/// <summary>
/// Custom JSON serializer for objects with additional properties
/// </summary>
static public readonly JsonSerializerSettings AdditionalPropertiesSerializerSettings = new JsonSerializerSettings
{
// OpenAPI generated types generally hide default constructors.
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
MissingMemberHandling = MissingMemberHandling.Ignore,
ContractResolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy
{
OverrideSpecifiedNames = false
}
}
};
/// <summary>
/// Gets or Sets the actual instance
/// </summary>

View File

@ -146,8 +146,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Apple>(jsonString, Fruit.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruit.GetType().GetProperty("AdditionalProperties") == null)
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Apple>(jsonString, Fruit.SerializerSettings));
}
matchedTypes.Add("Apple");
match++;
}
@ -158,8 +163,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Banana>(jsonString, Fruit.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruit.GetType().GetProperty("AdditionalProperties") == null)
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Banana>(jsonString, Fruit.SerializerSettings));
}
matchedTypes.Add("Banana");
match++;
}

View File

@ -155,8 +155,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<AppleReq>(jsonString, FruitReq.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruitReq.GetType().GetProperty("AdditionalProperties") == null)
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<AppleReq>(jsonString, FruitReq.SerializerSettings));
}
matchedTypes.Add("AppleReq");
match++;
}
@ -167,8 +172,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<BananaReq>(jsonString, FruitReq.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruitReq.GetType().GetProperty("AdditionalProperties") == null)
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<BananaReq>(jsonString, FruitReq.SerializerSettings));
}
matchedTypes.Add("BananaReq");
match++;
}

View File

@ -174,13 +174,28 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "Pig":
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.SerializerSettings));
}
return newMammal;
case "whale":
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.SerializerSettings));
}
return newMammal;
case "zebra":
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.SerializerSettings));
}
return newMammal;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for Mammal. Possible values: Pig whale zebra", discriminatorValue));
@ -191,8 +206,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.SerializerSettings));
}
matchedTypes.Add("Pig");
match++;
}
@ -203,8 +223,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.SerializerSettings));
}
matchedTypes.Add("Whale");
match++;
}
@ -215,8 +240,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.SerializerSettings));
}
matchedTypes.Add("Zebra");
match++;
}

View File

@ -157,10 +157,20 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "Quadrilateral":
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newNullableShape.GetType().GetProperty("AdditionalProperties") == null)
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.SerializerSettings));
}
return newNullableShape;
case "Triangle":
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newNullableShape.GetType().GetProperty("AdditionalProperties") == null)
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.SerializerSettings));
}
return newNullableShape;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for NullableShape. Possible values: Quadrilateral Triangle", discriminatorValue));
@ -171,8 +181,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newNullableShape.GetType().GetProperty("AdditionalProperties") == null)
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.SerializerSettings));
}
matchedTypes.Add("Quadrilateral");
match++;
}
@ -183,8 +198,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newNullableShape.GetType().GetProperty("AdditionalProperties") == null)
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.SerializerSettings));
}
matchedTypes.Add("Triangle");
match++;
}

View File

@ -148,10 +148,20 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "BasquePig":
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newPig.GetType().GetProperty("AdditionalProperties") == null)
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.SerializerSettings));
}
return newPig;
case "DanishPig":
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newPig.GetType().GetProperty("AdditionalProperties") == null)
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.SerializerSettings));
}
return newPig;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for Pig. Possible values: BasquePig DanishPig", discriminatorValue));
@ -162,8 +172,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newPig.GetType().GetProperty("AdditionalProperties") == null)
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.SerializerSettings));
}
matchedTypes.Add("BasquePig");
match++;
}
@ -174,8 +189,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newPig.GetType().GetProperty("AdditionalProperties") == null)
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.SerializerSettings));
}
matchedTypes.Add("DanishPig");
match++;
}

View File

@ -148,10 +148,20 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "ComplexQuadrilateral":
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newQuadrilateral.GetType().GetProperty("AdditionalProperties") == null)
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
}
return newQuadrilateral;
case "SimpleQuadrilateral":
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newQuadrilateral.GetType().GetProperty("AdditionalProperties") == null)
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
}
return newQuadrilateral;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for Quadrilateral. Possible values: ComplexQuadrilateral SimpleQuadrilateral", discriminatorValue));
@ -162,8 +172,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newQuadrilateral.GetType().GetProperty("AdditionalProperties") == null)
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
}
matchedTypes.Add("ComplexQuadrilateral");
match++;
}
@ -174,8 +189,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newQuadrilateral.GetType().GetProperty("AdditionalProperties") == null)
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
}
matchedTypes.Add("SimpleQuadrilateral");
match++;
}

View File

@ -148,10 +148,20 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "Quadrilateral":
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShape.GetType().GetProperty("AdditionalProperties") == null)
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.SerializerSettings));
}
return newShape;
case "Triangle":
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShape.GetType().GetProperty("AdditionalProperties") == null)
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.SerializerSettings));
}
return newShape;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for Shape. Possible values: Quadrilateral Triangle", discriminatorValue));
@ -162,8 +172,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShape.GetType().GetProperty("AdditionalProperties") == null)
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.SerializerSettings));
}
matchedTypes.Add("Quadrilateral");
match++;
}
@ -174,8 +189,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShape.GetType().GetProperty("AdditionalProperties") == null)
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.SerializerSettings));
}
matchedTypes.Add("Triangle");
match++;
}

View File

@ -157,10 +157,20 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "Quadrilateral":
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShapeOrNull.GetType().GetProperty("AdditionalProperties") == null)
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.SerializerSettings));
}
return newShapeOrNull;
case "Triangle":
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShapeOrNull.GetType().GetProperty("AdditionalProperties") == null)
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.SerializerSettings));
}
return newShapeOrNull;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for ShapeOrNull. Possible values: Quadrilateral Triangle", discriminatorValue));
@ -171,8 +181,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShapeOrNull.GetType().GetProperty("AdditionalProperties") == null)
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.SerializerSettings));
}
matchedTypes.Add("Quadrilateral");
match++;
}
@ -183,8 +198,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShapeOrNull.GetType().GetProperty("AdditionalProperties") == null)
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.SerializerSettings));
}
matchedTypes.Add("Triangle");
match++;
}

View File

@ -174,13 +174,28 @@ namespace Org.OpenAPITools.Model
switch (discriminatorValue)
{
case "EquilateralTriangle":
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.SerializerSettings));
}
return newTriangle;
case "IsoscelesTriangle":
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.SerializerSettings));
}
return newTriangle;
case "ScaleneTriangle":
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.SerializerSettings));
}
return newTriangle;
default:
System.Diagnostics.Debug.WriteLine(String.Format("Failed to lookup discriminator value `{0}` for Triangle. Possible values: EquilateralTriangle IsoscelesTriangle ScaleneTriangle", discriminatorValue));
@ -191,8 +206,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.SerializerSettings));
}
matchedTypes.Add("EquilateralTriangle");
match++;
}
@ -203,8 +223,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.SerializerSettings));
}
matchedTypes.Add("IsoscelesTriangle");
match++;
}
@ -215,8 +240,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.SerializerSettings));
}
matchedTypes.Add("ScaleneTriangle");
match++;
}

View File

@ -36,6 +36,23 @@ namespace Org.OpenAPITools.Model
}
};
/// <summary>
/// Custom JSON serializer for objects with additional properties
/// </summary>
static public readonly JsonSerializerSettings AdditionalPropertiesSerializerSettings = new JsonSerializerSettings
{
// OpenAPI generated types generally hide default constructors.
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
MissingMemberHandling = MissingMemberHandling.Ignore,
ContractResolver = new DefaultContractResolver
{
NamingStrategy = new CamelCaseNamingStrategy
{
OverrideSpecifiedNames = false
}
}
};
/// <summary>
/// Gets or Sets the actual instance
/// </summary>

View File

@ -146,8 +146,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Apple>(jsonString, Fruit.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruit.GetType().GetProperty("AdditionalProperties") == null)
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Apple>(jsonString, Fruit.SerializerSettings));
}
matchedTypes.Add("Apple");
match++;
}
@ -158,8 +163,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Banana>(jsonString, Fruit.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruit.GetType().GetProperty("AdditionalProperties") == null)
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Banana>(jsonString, Fruit.SerializerSettings));
}
matchedTypes.Add("Banana");
match++;
}

View File

@ -155,8 +155,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<AppleReq>(jsonString, FruitReq.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruitReq.GetType().GetProperty("AdditionalProperties") == null)
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<AppleReq>(jsonString, FruitReq.SerializerSettings));
}
matchedTypes.Add("AppleReq");
match++;
}
@ -167,8 +172,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<BananaReq>(jsonString, FruitReq.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newFruitReq.GetType().GetProperty("AdditionalProperties") == null)
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<BananaReq>(jsonString, FruitReq.SerializerSettings));
}
matchedTypes.Add("BananaReq");
match++;
}

View File

@ -173,8 +173,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.SerializerSettings));
}
matchedTypes.Add("Pig");
match++;
}
@ -185,8 +190,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.SerializerSettings));
}
matchedTypes.Add("Whale");
match++;
}
@ -197,8 +207,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newMammal.GetType().GetProperty("AdditionalProperties") == null)
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.SerializerSettings));
}
matchedTypes.Add("Zebra");
match++;
}

View File

@ -156,8 +156,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newNullableShape.GetType().GetProperty("AdditionalProperties") == null)
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.SerializerSettings));
}
matchedTypes.Add("Quadrilateral");
match++;
}
@ -168,8 +173,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newNullableShape.GetType().GetProperty("AdditionalProperties") == null)
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.SerializerSettings));
}
matchedTypes.Add("Triangle");
match++;
}

View File

@ -147,8 +147,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newPig.GetType().GetProperty("AdditionalProperties") == null)
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.SerializerSettings));
}
matchedTypes.Add("BasquePig");
match++;
}
@ -159,8 +164,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newPig.GetType().GetProperty("AdditionalProperties") == null)
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.SerializerSettings));
}
matchedTypes.Add("DanishPig");
match++;
}

View File

@ -147,8 +147,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newQuadrilateral.GetType().GetProperty("AdditionalProperties") == null)
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
}
matchedTypes.Add("ComplexQuadrilateral");
match++;
}
@ -159,8 +164,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newQuadrilateral.GetType().GetProperty("AdditionalProperties") == null)
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
}
matchedTypes.Add("SimpleQuadrilateral");
match++;
}

View File

@ -147,8 +147,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShape.GetType().GetProperty("AdditionalProperties") == null)
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.SerializerSettings));
}
matchedTypes.Add("Quadrilateral");
match++;
}
@ -159,8 +164,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShape.GetType().GetProperty("AdditionalProperties") == null)
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.SerializerSettings));
}
matchedTypes.Add("Triangle");
match++;
}

View File

@ -156,8 +156,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShapeOrNull.GetType().GetProperty("AdditionalProperties") == null)
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.SerializerSettings));
}
matchedTypes.Add("Quadrilateral");
match++;
}
@ -168,8 +173,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newShapeOrNull.GetType().GetProperty("AdditionalProperties") == null)
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.SerializerSettings));
}
matchedTypes.Add("Triangle");
match++;
}

View File

@ -173,8 +173,13 @@ namespace Org.OpenAPITools.Model
List<string> matchedTypes = new List<string>();
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.SerializerSettings));
}
matchedTypes.Add("EquilateralTriangle");
match++;
}
@ -185,8 +190,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.SerializerSettings));
}
matchedTypes.Add("IsoscelesTriangle");
match++;
}
@ -197,8 +207,13 @@ namespace Org.OpenAPITools.Model
}
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.AdditionalPropertiesSerializerSettings));
// if it does not contains "AdditionalProperties", use SerializerSettings to deserialize
if (newTriangle.GetType().GetProperty("AdditionalProperties") == null)
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.SerializerSettings));
}
matchedTypes.Add("ScaleneTriangle");
match++;
}