diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
index 4a4c5491e..a802f79af 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
@@ -3,7 +3,6 @@
using System.Collections.Generic;
using System.Linq;
-using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Interfaces;
using Microsoft.OpenApi.Writers;
@@ -45,7 +44,7 @@ public class OpenApiResponse : IOpenApiSerializable, IOpenApiReferenceable, IOpe
///
/// Indicates if object is populated with data or is just a reference to the data
///
- public bool UnresolvedReference { get; set;}
+ public bool UnresolvedReference { get; set; }
///
/// Reference pointer.
@@ -79,7 +78,7 @@ public void SerializeAsV3WithoutReference(IOpenApiWriter writer)
writer.WriteStartObject();
// description
- writer.WriteProperty(OpenApiConstants.Description, Description);
+ writer.WriteRequiredProperty(OpenApiConstants.Description, Description);
// headers
writer.WriteOptionalMap(OpenApiConstants.Headers, Headers, (w, h) => h.SerializeAsV3(w));
@@ -123,7 +122,8 @@ public void SerializeAsV2WithoutReference(IOpenApiWriter writer)
writer.WriteStartObject();
// description
- writer.WriteProperty(OpenApiConstants.Description, Description);
+ writer.WriteRequiredProperty(OpenApiConstants.Description, Description);
+
if (Content != null)
{
var mediatype = Content.FirstOrDefault();
diff --git a/src/Microsoft.OpenApi/Writers/OpenApiWriterExtensions.cs b/src/Microsoft.OpenApi/Writers/OpenApiWriterExtensions.cs
index 8da814bbb..1c82d2cb9 100644
--- a/src/Microsoft.OpenApi/Writers/OpenApiWriterExtensions.cs
+++ b/src/Microsoft.OpenApi/Writers/OpenApiWriterExtensions.cs
@@ -32,6 +32,26 @@ public static void WriteProperty(this IOpenApiWriter writer, string name, string
writer.WriteValue(value);
}
+ ///
+ /// Write required string property.
+ ///
+ /// The writer.
+ /// The property name.
+ /// The property value.
+ public static void WriteRequiredProperty(this IOpenApiWriter writer, string name, string value)
+ {
+ CheckArguments(writer, name);
+ writer.WritePropertyName(name);
+ if (value == null)
+ {
+ writer.WriteNull();
+ }
+ else
+ {
+ writer.WriteValue(value);
+ }
+ }
+
///
/// Write a boolean property.
///
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs
index 51ba8b08d..f83950ef3 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiOperationTests.cs
@@ -359,6 +359,7 @@ public void SerializeOperationWithBodyAsV3JsonWorks()
""$ref"": ""#/components/responses/response1""
},
""400"": {
+ ""description"": null,
""content"": {
""application/json"": {
""schema"": {
@@ -431,6 +432,7 @@ public void SerializeAdvancedOperationWithTagAndSecurityAsV3JsonWorks()
""$ref"": ""#/components/responses/response1""
},
""400"": {
+ ""description"": null,
""content"": {
""application/json"": {
""schema"": {
@@ -554,7 +556,7 @@ public void SerializeOperationWithFormDataAsV3JsonWorks()
// Act
var actual = _operationWithFormData.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);
-
+
// Assert
actual = actual.MakeLineBreaksEnvironmentNeutral();
expected = expected.MakeLineBreaksEnvironmentNeutral();
@@ -607,7 +609,7 @@ public void SerializeOperationWithFormDataAsV2JsonWorks()
// Act
var actual = _operationWithFormData.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0);
-
+
// Assert
actual = actual.MakeLineBreaksEnvironmentNeutral();
expected = expected.MakeLineBreaksEnvironmentNeutral();
@@ -658,6 +660,7 @@ public void SerializeOperationWithBodyAsV2JsonWorks()
""$ref"": ""#/responses/response1""
},
""400"": {
+ ""description"": null,
""schema"": {
""maximum"": 10,
""minimum"": 5,
@@ -672,7 +675,7 @@ public void SerializeOperationWithBodyAsV2JsonWorks()
// Act
var actual = _operationWithBody.SerializeAsJson(OpenApiSpecVersion.OpenApi2_0);
-
+
// Assert
actual = actual.MakeLineBreaksEnvironmentNeutral();
expected = expected.MakeLineBreaksEnvironmentNeutral();
@@ -727,6 +730,7 @@ public void SerializeAdvancedOperationWithTagAndSecurityAsV2JsonWorks()
""$ref"": ""#/responses/response1""
},
""400"": {
+ ""description"": null,
""schema"": {
""maximum"": 10,
""minimum"": 5,
diff --git a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs
index 98fab35f5..fce3bf097 100644
--- a/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs
+++ b/test/Microsoft.OpenApi.Tests/Models/OpenApiResponseTests.cs
@@ -116,11 +116,18 @@ public void SerializeBasicResponseWorks(
OpenApiSpecVersion version,
OpenApiFormat format)
{
- // Arrange & Act
+ // Arrange
+ var expected = format == OpenApiFormat.Json ? @"{
+ ""description"": null
+}" : @"description: ";
+
+ // Act
var actual = BasicResponse.Serialize(version, format);
// Assert
- actual.Should().Be("{ }");
+ actual = actual.MakeLineBreaksEnvironmentNeutral();
+ expected = expected.MakeLineBreaksEnvironmentNeutral();
+ actual.Should().Be(expected);
}
[Fact]