diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
index fd74c2b57..a990ddcbb 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
@@ -165,50 +165,25 @@ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion versio
writer.WriteEndObject();
}
-
- ///
- public void SerializeAsV2(IOpenApiWriter writer)
+ ///
+ /// Write the "in" property for V2 serialization.
+ ///
+ /// Writer to use for the serialization
+ internal virtual void WriteInPropertyForV2(IOpenApiWriter writer)
{
- Utils.CheckArgumentNull(writer);
-
- writer.WriteStartObject();
-
- // in
- if (this is OpenApiFormDataParameter)
- {
- writer.WriteProperty(OpenApiConstants.In, "formData");
- }
- else if (this is OpenApiBodyParameter)
- {
- writer.WriteProperty(OpenApiConstants.In, "body");
- }
- else
- {
- writer.WriteProperty(OpenApiConstants.In, In?.GetDisplayName());
- }
-
- // name
- writer.WriteProperty(OpenApiConstants.Name, Name);
-
- // description
- writer.WriteProperty(OpenApiConstants.Description, Description);
-
- // required
- writer.WriteProperty(OpenApiConstants.Required, Required, false);
-
- // deprecated
- writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false);
-
- var extensionsClone = Extensions is not null ? new Dictionary(Extensions) : null;
+ writer.WriteProperty(OpenApiConstants.In, In?.GetDisplayName());
+ }
- // schema
- if (this is OpenApiBodyParameter)
- {
- writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w));
- }
+ ///
+ /// Write the request body schema for V2 serialization.
+ ///
+ /// Writer to use for the serialization
+ /// Extensions clone
+ internal virtual void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Dictionary? extensionsClone)
+ {
// In V2 parameter's type can't be a reference to a custom object schema or can't be of type object
// So in that case map the type as string.
- else if (Schema is OpenApiSchemaReference { UnresolvedReference: true } || (Schema?.Type & JsonSchemaType.Object) == JsonSchemaType.Object)
+ if (Schema is OpenApiSchemaReference { UnresolvedReference: true } || (Schema?.Type & JsonSchemaType.Object) == JsonSchemaType.Object)
{
writer.WriteProperty(OpenApiConstants.Type, "string");
}
@@ -270,7 +245,34 @@ public void SerializeAsV2(IOpenApiWriter writer)
}
}
}
+ }
+
+ ///
+ public void SerializeAsV2(IOpenApiWriter writer)
+ {
+ Utils.CheckArgumentNull(writer);
+
+ writer.WriteStartObject();
+
+ // in
+ WriteInPropertyForV2(writer);
+ // name
+ writer.WriteProperty(OpenApiConstants.Name, Name);
+
+ // description
+ writer.WriteProperty(OpenApiConstants.Description, Description);
+
+ // required
+ writer.WriteProperty(OpenApiConstants.Required, Required, false);
+
+ // deprecated
+ writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false);
+
+ var extensionsClone = Extensions is not null ? new Dictionary(Extensions) : null;
+
+ // schema
+ WriteRequestBodySchemaForV2(writer, extensionsClone);
//examples
if (Examples != null && Examples.Any())
{
@@ -315,6 +317,14 @@ public IOpenApiParameter CreateShallowCopy()
///
internal class OpenApiBodyParameter : OpenApiParameter
{
+ internal override void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Dictionary? extensionsClone)
+ {
+ writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w));
+ }
+ internal override void WriteInPropertyForV2(IOpenApiWriter writer)
+ {
+ writer.WriteProperty(OpenApiConstants.In, "body");
+ }
}
///
@@ -322,5 +332,9 @@ internal class OpenApiBodyParameter : OpenApiParameter
///
internal class OpenApiFormDataParameter : OpenApiParameter
{
+ internal override void WriteInPropertyForV2(IOpenApiWriter writer)
+ {
+ writer.WriteProperty(OpenApiConstants.In, "formData");
+ }
}
}
diff --git a/src/Microsoft.OpenApi/Writers/FormattingStreamWriter.cs b/src/Microsoft.OpenApi/Writers/FormattingStreamWriter.cs
index ea4f33f63..5d24b1f3b 100644
--- a/src/Microsoft.OpenApi/Writers/FormattingStreamWriter.cs
+++ b/src/Microsoft.OpenApi/Writers/FormattingStreamWriter.cs
@@ -19,12 +19,13 @@ public class FormattingStreamWriter : StreamWriter
public FormattingStreamWriter(Stream stream, IFormatProvider formatProvider)
: base(stream)
{
- this.FormatProvider = formatProvider;
+ _formatProvider = formatProvider;
}
+ private readonly IFormatProvider _formatProvider;
///
/// The associated with this .
///
- public override IFormatProvider FormatProvider { get; }
+ public override IFormatProvider FormatProvider { get => _formatProvider; }
}
}