in src/Microsoft.OpenApi/Models/OpenApiParameter.cs [231:334]
public void SerializeAsV2WithoutReference(IOpenApiWriter 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 = new Dictionary<string, IOpenApiExtension>(Extensions);
// schema
if (this is OpenApiBodyParameter)
{
writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w));
}
// 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?.UnresolvedReference == true || Schema?.Type == "object")
{
writer.WriteProperty(OpenApiConstants.Type, "string");
}
else
{
// type
// format
// items
// collectionFormat
// default
// maximum
// exclusiveMaximum
// minimum
// exclusiveMinimum
// maxLength
// minLength
// pattern
// maxItems
// minItems
// uniqueItems
// enum
// multipleOf
if (Schema != null)
{
Schema.WriteAsItemsProperties(writer);
if (Schema.Extensions != null)
{
foreach (var key in Schema.Extensions.Keys)
{
// The extension will already have been serialized as part of the call to WriteAsItemsProperties above,
// so remove it from the cloned collection so we don't write it again.
extensionsClone.Remove(key);
}
}
}
// allowEmptyValue
writer.WriteProperty(OpenApiConstants.AllowEmptyValue, AllowEmptyValue, false);
if (this.In == ParameterLocation.Query)
{
if (this.Style == ParameterStyle.Form && this.Explode == true)
{
writer.WriteProperty("collectionFormat", "multi");
}
else if (this.Style == ParameterStyle.PipeDelimited)
{
writer.WriteProperty("collectionFormat", "pipes");
}
else if (this.Style == ParameterStyle.SpaceDelimited)
{
writer.WriteProperty("collectionFormat", "ssv");
}
}
}
// extensions
writer.WriteExtensions(extensionsClone, OpenApiSpecVersion.OpenApi2_0);
writer.WriteEndObject();
}