[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}}.SerializerSettings));
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:
@ -128,7 +133,12 @@
try
{
new{{classname}} = new {{classname}}(JsonConvert.DeserializeObject<{{{.}}}>(jsonString, {{classname}}.SerializerSettings));
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

@ -147,7 +147,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Apple>(jsonString, Fruit.SerializerSettings));
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++;
}
@ -159,7 +164,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Banana>(jsonString, Fruit.SerializerSettings));
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

@ -156,7 +156,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<AppleReq>(jsonString, FruitReq.SerializerSettings));
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++;
}
@ -168,7 +173,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<BananaReq>(jsonString, FruitReq.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -192,7 +207,12 @@ namespace Org.OpenAPITools.Model
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.SerializerSettings));
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++;
}
@ -204,7 +224,12 @@ namespace Org.OpenAPITools.Model
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.SerializerSettings));
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++;
}
@ -216,7 +241,12 @@ namespace Org.OpenAPITools.Model
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -172,7 +182,12 @@ namespace Org.OpenAPITools.Model
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.SerializerSettings));
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++;
}
@ -184,7 +199,12 @@ namespace Org.OpenAPITools.Model
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -163,7 +173,12 @@ namespace Org.OpenAPITools.Model
try
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.SerializerSettings));
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++;
}
@ -175,7 +190,12 @@ namespace Org.OpenAPITools.Model
try
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -163,7 +173,12 @@ namespace Org.OpenAPITools.Model
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
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++;
}
@ -175,7 +190,12 @@ namespace Org.OpenAPITools.Model
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -163,7 +173,12 @@ namespace Org.OpenAPITools.Model
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.SerializerSettings));
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++;
}
@ -175,7 +190,12 @@ namespace Org.OpenAPITools.Model
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -172,7 +182,12 @@ namespace Org.OpenAPITools.Model
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.SerializerSettings));
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++;
}
@ -184,7 +199,12 @@ namespace Org.OpenAPITools.Model
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -192,7 +207,12 @@ namespace Org.OpenAPITools.Model
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.SerializerSettings));
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++;
}
@ -204,7 +224,12 @@ namespace Org.OpenAPITools.Model
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.SerializerSettings));
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++;
}
@ -216,7 +241,12 @@ namespace Org.OpenAPITools.Model
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.SerializerSettings));
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

@ -147,7 +147,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Apple>(jsonString, Fruit.SerializerSettings));
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++;
}
@ -159,7 +164,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Banana>(jsonString, Fruit.SerializerSettings));
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

@ -156,7 +156,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<AppleReq>(jsonString, FruitReq.SerializerSettings));
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++;
}
@ -168,7 +173,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<BananaReq>(jsonString, FruitReq.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -192,7 +207,12 @@ namespace Org.OpenAPITools.Model
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.SerializerSettings));
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++;
}
@ -204,7 +224,12 @@ namespace Org.OpenAPITools.Model
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.SerializerSettings));
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++;
}
@ -216,7 +241,12 @@ namespace Org.OpenAPITools.Model
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -172,7 +182,12 @@ namespace Org.OpenAPITools.Model
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.SerializerSettings));
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++;
}
@ -184,7 +199,12 @@ namespace Org.OpenAPITools.Model
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -163,7 +173,12 @@ namespace Org.OpenAPITools.Model
try
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.SerializerSettings));
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++;
}
@ -175,7 +190,12 @@ namespace Org.OpenAPITools.Model
try
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -163,7 +173,12 @@ namespace Org.OpenAPITools.Model
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
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++;
}
@ -175,7 +190,12 @@ namespace Org.OpenAPITools.Model
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -163,7 +173,12 @@ namespace Org.OpenAPITools.Model
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.SerializerSettings));
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++;
}
@ -175,7 +190,12 @@ namespace Org.OpenAPITools.Model
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -172,7 +182,12 @@ namespace Org.OpenAPITools.Model
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.SerializerSettings));
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++;
}
@ -184,7 +199,12 @@ namespace Org.OpenAPITools.Model
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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.SerializerSettings));
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));
@ -192,7 +207,12 @@ namespace Org.OpenAPITools.Model
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.SerializerSettings));
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++;
}
@ -204,7 +224,12 @@ namespace Org.OpenAPITools.Model
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.SerializerSettings));
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++;
}
@ -216,7 +241,12 @@ namespace Org.OpenAPITools.Model
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.SerializerSettings));
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

@ -147,7 +147,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Apple>(jsonString, Fruit.SerializerSettings));
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++;
}
@ -159,7 +164,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruit = new Fruit(JsonConvert.DeserializeObject<Banana>(jsonString, Fruit.SerializerSettings));
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

@ -156,7 +156,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<AppleReq>(jsonString, FruitReq.SerializerSettings));
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++;
}
@ -168,7 +173,12 @@ namespace Org.OpenAPITools.Model
try
{
newFruitReq = new FruitReq(JsonConvert.DeserializeObject<BananaReq>(jsonString, FruitReq.SerializerSettings));
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,7 +174,12 @@ namespace Org.OpenAPITools.Model
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Pig>(jsonString, Mammal.SerializerSettings));
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++;
}
@ -186,7 +191,12 @@ namespace Org.OpenAPITools.Model
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Whale>(jsonString, Mammal.SerializerSettings));
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++;
}
@ -198,7 +208,12 @@ namespace Org.OpenAPITools.Model
try
{
newMammal = new Mammal(JsonConvert.DeserializeObject<Zebra>(jsonString, Mammal.SerializerSettings));
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,7 +157,12 @@ namespace Org.OpenAPITools.Model
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, NullableShape.SerializerSettings));
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++;
}
@ -169,7 +174,12 @@ namespace Org.OpenAPITools.Model
try
{
newNullableShape = new NullableShape(JsonConvert.DeserializeObject<Triangle>(jsonString, NullableShape.SerializerSettings));
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,7 +148,12 @@ namespace Org.OpenAPITools.Model
try
{
newPig = new Pig(JsonConvert.DeserializeObject<BasquePig>(jsonString, Pig.SerializerSettings));
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++;
}
@ -160,7 +165,12 @@ namespace Org.OpenAPITools.Model
try
{
newPig = new Pig(JsonConvert.DeserializeObject<DanishPig>(jsonString, Pig.SerializerSettings));
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,7 +148,12 @@ namespace Org.OpenAPITools.Model
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<ComplexQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
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++;
}
@ -160,7 +165,12 @@ namespace Org.OpenAPITools.Model
try
{
newQuadrilateral = new Quadrilateral(JsonConvert.DeserializeObject<SimpleQuadrilateral>(jsonString, Quadrilateral.SerializerSettings));
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,7 +148,12 @@ namespace Org.OpenAPITools.Model
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, Shape.SerializerSettings));
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++;
}
@ -160,7 +165,12 @@ namespace Org.OpenAPITools.Model
try
{
newShape = new Shape(JsonConvert.DeserializeObject<Triangle>(jsonString, Shape.SerializerSettings));
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,7 +157,12 @@ namespace Org.OpenAPITools.Model
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Quadrilateral>(jsonString, ShapeOrNull.SerializerSettings));
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++;
}
@ -169,7 +174,12 @@ namespace Org.OpenAPITools.Model
try
{
newShapeOrNull = new ShapeOrNull(JsonConvert.DeserializeObject<Triangle>(jsonString, ShapeOrNull.SerializerSettings));
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,7 +174,12 @@ namespace Org.OpenAPITools.Model
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<EquilateralTriangle>(jsonString, Triangle.SerializerSettings));
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++;
}
@ -186,7 +191,12 @@ namespace Org.OpenAPITools.Model
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<IsoscelesTriangle>(jsonString, Triangle.SerializerSettings));
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++;
}
@ -198,7 +208,12 @@ namespace Org.OpenAPITools.Model
try
{
newTriangle = new Triangle(JsonConvert.DeserializeObject<ScaleneTriangle>(jsonString, Triangle.SerializerSettings));
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++;
}