Skip to content

Commit 092af51

Browse files
committed
Fixed issue with additionalProperties #196
1 parent d05491a commit 092af51

File tree

5 files changed

+38
-10
lines changed

5 files changed

+38
-10
lines changed

src/Microsoft.OpenApi.Readers/V2/OpenApiSchemaDeserializer.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,14 @@ internal static partial class OpenApiV2Deserializer
140140
{
141141
"additionalProperties", (o, n) =>
142142
{
143-
o.AdditionalProperties = LoadSchema(n);
143+
if (n is ValueNode)
144+
{
145+
o.AdditionalPropertiesAllowed = bool.Parse(n.GetScalarValue());
146+
}
147+
else
148+
{
149+
o.AdditionalProperties = LoadSchema(n);
150+
}
144151
}
145152
},
146153
{

src/Microsoft.OpenApi.Readers/V3/OpenApiSchemaDeserializer.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,7 @@ internal static partial class OpenApiV3Deserializer
109109
{
110110
"enum", (o, n) =>
111111
{
112-
o.Enum = n.CreateSimpleList<IOpenApiAny>(s => new OpenApiString(s.GetScalarValue()));
113-
}
112+
o.Enum = n.CreateListOfAny(); }
114113
},
115114
{
116115
"type", (o, n) =>
@@ -157,7 +156,14 @@ internal static partial class OpenApiV3Deserializer
157156
{
158157
"additionalProperties", (o, n) =>
159158
{
160-
o.AdditionalProperties = LoadSchema(n);
159+
if (n is ValueNode)
160+
{
161+
o.AdditionalPropertiesAllowed = bool.Parse(n.GetScalarValue());
162+
}
163+
else
164+
{
165+
o.AdditionalProperties = LoadSchema(n);
166+
}
161167
}
162168
},
163169
{

src/Microsoft.OpenApi/Models/OpenApiSchema.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,19 @@ public class OpenApiSchema : IOpenApiSerializable, IOpenApiReferenceable, IOpenA
173173
/// </summary>
174174
public int? MinProperties { get; set; }
175175

176+
/// <summary>
177+
/// Indicates if the schema can contain properties other than those defined by the properties map.
178+
/// </summary>
179+
public bool AdditionalPropertiesAllowed { get; set; } = true;
180+
176181
/// <summary>
177182
/// Follow JSON Schema definition: https://tools.ietf.org/html/draft-fge-json-schema-validation-00
178183
/// Value can be boolean or object. Inline or referenced schema
179184
/// MUST be of a Schema Object and not a standard JSON Schema.
180185
/// </summary>
181186
public OpenApiSchema AdditionalProperties { get; set; }
182187

188+
183189
/// <summary>
184190
/// Adds support for polymorphism. The discriminator is an object name that is used to differentiate
185191
/// between other schemas which may satisfy the payload description.
@@ -331,10 +337,17 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
331337
writer.WriteOptionalMap(OpenApiConstants.Properties, Properties, (w, s) => s.SerializeAsV3(w));
332338

333339
// additionalProperties
334-
writer.WriteOptionalObject(
335-
OpenApiConstants.AdditionalProperties,
336-
AdditionalProperties,
337-
(w, s) => s.SerializeAsV3(w));
340+
if (AdditionalPropertiesAllowed)
341+
{
342+
writer.WriteOptionalObject(
343+
OpenApiConstants.AdditionalProperties,
344+
AdditionalProperties,
345+
(w, s) => s.SerializeAsV3(w));
346+
}
347+
else
348+
{
349+
writer.WriteProperty(OpenApiConstants.AdditionalProperties, AdditionalPropertiesAllowed);
350+
}
338351

339352
// description
340353
writer.WriteProperty(OpenApiConstants.Description, Description);

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ public void ParseSimpleSchemaShouldSucceed()
9191
Format = "int32",
9292
Minimum = 0
9393
}
94-
}
94+
},
95+
AdditionalPropertiesAllowed = false
9596
});
9697
}
9798
}

test/Microsoft.OpenApi.Readers.Tests/V3Tests/Samples/OpenApiSchema/simpleSchema.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ properties:
1111
age:
1212
type: integer
1313
format: int32
14-
minimum: 0
14+
minimum: 0
15+
additionalProperties: false

0 commit comments

Comments
 (0)