@@ -165,50 +165,25 @@ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion versio
165165
166166 writer . WriteEndObject ( ) ;
167167 }
168-
169- /// <inheritdoc/>
170- public void SerializeAsV2 ( IOpenApiWriter writer )
168+ /// <summary>
169+ /// Write the "in" property for V2 serialization.
170+ /// </summary>
171+ /// <param name="writer">Writer to use for the serialization</param>
172+ internal virtual void WriteInPropertyForV2 ( IOpenApiWriter writer )
171173 {
172- Utils . CheckArgumentNull ( writer ) ;
173-
174- writer . WriteStartObject ( ) ;
175-
176- // in
177- if ( this is OpenApiFormDataParameter )
178- {
179- writer . WriteProperty ( OpenApiConstants . In , "formData" ) ;
180- }
181- else if ( this is OpenApiBodyParameter )
182- {
183- writer . WriteProperty ( OpenApiConstants . In , "body" ) ;
184- }
185- else
186- {
187- writer . WriteProperty ( OpenApiConstants . In , In ? . GetDisplayName ( ) ) ;
188- }
189-
190- // name
191- writer . WriteProperty ( OpenApiConstants . Name , Name ) ;
192-
193- // description
194- writer . WriteProperty ( OpenApiConstants . Description , Description ) ;
195-
196- // required
197- writer . WriteProperty ( OpenApiConstants . Required , Required , false ) ;
198-
199- // deprecated
200- writer . WriteProperty ( OpenApiConstants . Deprecated , Deprecated , false ) ;
201-
202- var extensionsClone = Extensions is not null ? new Dictionary < string , IOpenApiExtension > ( Extensions ) : null ;
174+ writer . WriteProperty ( OpenApiConstants . In , In ? . GetDisplayName ( ) ) ;
175+ }
203176
204- // schema
205- if ( this is OpenApiBodyParameter )
206- {
207- writer . WriteOptionalObject ( OpenApiConstants . Schema , Schema , ( w , s ) => s . SerializeAsV2 ( w ) ) ;
208- }
177+ /// <summary>
178+ /// Write the request body schema for V2 serialization.
179+ /// </summary>
180+ /// <param name="writer">Writer to use for the serialization</param>
181+ /// <param name="extensionsClone">Extensions clone</param>
182+ internal virtual void WriteRequestBodySchemaForV2 ( IOpenApiWriter writer , Dictionary < string , IOpenApiExtension > ? extensionsClone )
183+ {
209184 // In V2 parameter's type can't be a reference to a custom object schema or can't be of type object
210185 // So in that case map the type as string.
211- else if ( Schema is OpenApiSchemaReference { UnresolvedReference : true } || ( Schema ? . Type & JsonSchemaType . Object ) == JsonSchemaType . Object )
186+ if ( Schema is OpenApiSchemaReference { UnresolvedReference : true } || ( Schema ? . Type & JsonSchemaType . Object ) == JsonSchemaType . Object )
212187 {
213188 writer . WriteProperty ( OpenApiConstants . Type , "string" ) ;
214189 }
@@ -270,7 +245,34 @@ public void SerializeAsV2(IOpenApiWriter writer)
270245 }
271246 }
272247 }
248+ }
249+
250+ /// <inheritdoc/>
251+ public void SerializeAsV2 ( IOpenApiWriter writer )
252+ {
253+ Utils . CheckArgumentNull ( writer ) ;
254+
255+ writer . WriteStartObject ( ) ;
256+
257+ // in
258+ WriteInPropertyForV2 ( writer ) ;
273259
260+ // name
261+ writer . WriteProperty ( OpenApiConstants . Name , Name ) ;
262+
263+ // description
264+ writer . WriteProperty ( OpenApiConstants . Description , Description ) ;
265+
266+ // required
267+ writer . WriteProperty ( OpenApiConstants . Required , Required , false ) ;
268+
269+ // deprecated
270+ writer . WriteProperty ( OpenApiConstants . Deprecated , Deprecated , false ) ;
271+
272+ var extensionsClone = Extensions is not null ? new Dictionary < string , IOpenApiExtension > ( Extensions ) : null ;
273+
274+ // schema
275+ WriteRequestBodySchemaForV2 ( writer , extensionsClone ) ;
274276 //examples
275277 if ( Examples != null && Examples . Any ( ) )
276278 {
@@ -315,12 +317,24 @@ public IOpenApiParameter CreateShallowCopy()
315317 /// </summary>
316318 internal class OpenApiBodyParameter : OpenApiParameter
317319 {
320+ internal override void WriteRequestBodySchemaForV2 ( IOpenApiWriter writer , Dictionary < string , IOpenApiExtension > ? extensionsClone )
321+ {
322+ writer . WriteOptionalObject ( OpenApiConstants . Schema , Schema , ( w , s ) => s . SerializeAsV2 ( w ) ) ;
323+ }
324+ internal override void WriteInPropertyForV2 ( IOpenApiWriter writer )
325+ {
326+ writer . WriteProperty ( OpenApiConstants . In , "body" ) ;
327+ }
318328 }
319329
320330 /// <summary>
321331 /// Form parameter class to propagate information needed for <see cref="OpenApiParameter.SerializeAsV2"/>
322332 /// </summary>
323333 internal class OpenApiFormDataParameter : OpenApiParameter
324334 {
335+ internal override void WriteInPropertyForV2 ( IOpenApiWriter writer )
336+ {
337+ writer . WriteProperty ( OpenApiConstants . In , "formData" ) ;
338+ }
325339 }
326340}
0 commit comments