Skip to content

Commit e905e40

Browse files
committed
fix: serializes an empty object to be compliant with the specification
Signed-off-by: Vincent Biret <[email protected]>
1 parent e1523e4 commit e905e40

File tree

4 files changed

+80
-8
lines changed

4 files changed

+80
-8
lines changed

src/Microsoft.OpenApi/Models/OpenApiHeader.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,33 @@ internal OpenApiHeader(IOpenApiHeader header)
8585
/// </summary>
8686
public void SerializeAsV31(IOpenApiWriter writer)
8787
{
88-
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV31(writer), (writer, element) => element?.SerializeAsV31(writer));
88+
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV31(writer), (writer, element) =>
89+
{
90+
if(element is null)
91+
{
92+
writer.WriteStartObject();
93+
writer.WriteEndObject();
94+
}
95+
else
96+
element.SerializeAsV31(writer);
97+
});
8998
}
9099

91100
/// <summary>
92101
/// Serialize <see cref="OpenApiHeader"/> to Open Api v3.0
93102
/// </summary>
94103
public void SerializeAsV3(IOpenApiWriter writer)
95104
{
96-
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer), (writer, element) => element?.SerializeAsV3(writer));
105+
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer), (writer, element) =>
106+
{
107+
if(element is null)
108+
{
109+
writer.WriteStartObject();
110+
writer.WriteEndObject();
111+
}
112+
else
113+
element.SerializeAsV3(writer);
114+
});
97115
}
98116

99117
internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,

src/Microsoft.OpenApi/Models/OpenApiParameter.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,31 @@ internal OpenApiParameter(IOpenApiParameter parameter)
102102
/// <inheritdoc/>
103103
public void SerializeAsV31(IOpenApiWriter writer)
104104
{
105-
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer), (writer, element) => element?.SerializeAsV31(writer));
105+
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer), (writer, element) =>
106+
{
107+
if(element is null)
108+
{
109+
writer.WriteStartObject();
110+
writer.WriteEndObject();
111+
}
112+
else
113+
element.SerializeAsV31(writer);
114+
});
106115
}
107116

108117
/// <inheritdoc/>
109118
public void SerializeAsV3(IOpenApiWriter writer)
110119
{
111-
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer), (writer, element) => element?.SerializeAsV3(writer));
120+
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer), (writer, element) =>
121+
{
122+
if(element is null)
123+
{
124+
writer.WriteStartObject();
125+
writer.WriteEndObject();
126+
}
127+
else
128+
element.SerializeAsV3(writer);
129+
});
112130
}
113131

114132
internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,

src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,33 @@ internal OpenApiRequestBody(IOpenApiRequestBody requestBody)
5252
/// </summary>
5353
public void SerializeAsV31(IOpenApiWriter writer)
5454
{
55-
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element?.SerializeAsV31(writer));
55+
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) =>
56+
{
57+
if(element is null)
58+
{
59+
writer.WriteStartObject();
60+
writer.WriteEndObject();
61+
}
62+
else
63+
element.SerializeAsV31(writer);
64+
});
5665
}
5766

5867
/// <summary>
5968
/// Serialize <see cref="OpenApiRequestBody"/> to Open Api v3.0
6069
/// </summary>
6170
public void SerializeAsV3(IOpenApiWriter writer)
6271
{
63-
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element?.SerializeAsV3(writer));
72+
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) =>
73+
{
74+
if(element is null)
75+
{
76+
writer.WriteStartObject();
77+
writer.WriteEndObject();
78+
}
79+
else
80+
element.SerializeAsV3(writer);
81+
});
6482
}
6583

6684
internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,

src/Microsoft.OpenApi/Models/OpenApiResponse.cs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,33 @@ internal OpenApiResponse(IOpenApiResponse response)
5353
/// </summary>
5454
public void SerializeAsV31(IOpenApiWriter writer)
5555
{
56-
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer), (writer, element) => element?.SerializeAsV31(writer));
56+
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1, (writer, element) => element.SerializeAsV31(writer), (writer, element) =>
57+
{
58+
if(element is null)
59+
{
60+
writer.WriteStartObject();
61+
writer.WriteEndObject();
62+
}
63+
else
64+
element.SerializeAsV31(writer);
65+
});
5766
}
5867

5968
/// <summary>
6069
/// Serialize <see cref="OpenApiResponse"/> to Open Api v3.0.
6170
/// </summary>
6271
public void SerializeAsV3(IOpenApiWriter writer)
6372
{
64-
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer), (writer, element) => element?.SerializeAsV3(writer));
73+
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer), (writer, element) =>
74+
{
75+
if(element is null)
76+
{
77+
writer.WriteStartObject();
78+
writer.WriteEndObject();
79+
}
80+
else
81+
element.SerializeAsV3(writer);
82+
});
6583
}
6684

6785
private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,

0 commit comments

Comments
 (0)