private static void InlineSchema(OpenApiSchema schema, OpenApiProperty schemaProp) { schemaProp.Items = new Dictionary <string, object> { { "title", schema.Title }, { "discriminator", schema.Discriminator }, { "readOnly", schema.ReadOnly }, { "xml", schema.Xml }, { "externalDocs", schema.ExternalDocs }, { "example", schema.Example }, { "required", schema.Required }, { "allOf", schema.AllOf }, { "properties", schema.Properties }, { "additionalProperties", schema.AdditionalProperties }, { "description", schema.Description }, { "type", schema.Type }, { "format", schema.Format }, { "items", schema.Items }, { "collectionFormat", schema.CollectionFormat }, { "default", schema.Default }, { "maximum", schema.Maximum }, { "exclusiveMaximum", schema.ExclusiveMaximum }, { "exclusiveMinimum", schema.ExclusiveMinimum }, { "maxLength", schema.MaxLength }, { "minLength", schema.MinLength }, { "pattern", schema.Pattern }, { "maxItems", schema.MaxItems }, { "minItems", schema.MinItems }, { "uniqueItems", schema.UniqueItems }, { "maxProperties", schema.MaxProperties }, { "minProperties", schema.MinProperties }, { "enum", schema.Enum }, { "multipleOf", schema.MultipleOf }, { "x-nullable", schema.Nullable } }; }
private OpenApiProperty GetOpenApiProperty(IDictionary <string, OpenApiSchema> schemas, Type propertyType, string route, string verb) { var schemaProp = new OpenApiProperty(); if (IsKeyValuePairType(propertyType)) { ParseDefinitions(schemas, propertyType, route, verb); schemaProp.Ref = "#/definitions/" + GetSchemaTypeName(propertyType); } else if (IsListType(propertyType)) { schemaProp.Type = OpenApiType.Array; var listItemType = GetListElementType(propertyType); if (IsSwaggerScalarType(listItemType)) { schemaProp.Items = new Dictionary <string, object> { { "type", GetSwaggerTypeName(listItemType) }, { "format", GetSwaggerTypeFormat(listItemType, route, verb) } }; if (IsRequiredType(listItemType)) { schemaProp.Items.Add("x-nullable", false); //schemaProp.Items.Add("required", "true"); } } else { schemaProp.Items = new Dictionary <string, object> { { "$ref", "#/definitions/" + GetSchemaTypeName(listItemType) } }; } ParseDefinitions(schemas, listItemType, route, verb); } else if ((Nullable.GetUnderlyingType(propertyType) ?? propertyType).IsEnum()) { var enumType = Nullable.GetUnderlyingType(propertyType) ?? propertyType; if (enumType.IsNumericType()) { var underlyingType = Enum.GetUnderlyingType(enumType); schemaProp.Type = GetSwaggerTypeName(underlyingType); schemaProp.Format = GetSwaggerTypeFormat(underlyingType, route, verb); schemaProp.Enum = GetNumericValues(enumType, underlyingType).ToList(); } else { schemaProp.Type = OpenApiType.String; schemaProp.Enum = Enum.GetNames(enumType).ToList(); } } else if (IsSwaggerScalarType(propertyType)) { schemaProp.Type = GetSwaggerTypeName(propertyType); schemaProp.Format = GetSwaggerTypeFormat(propertyType, route, verb); schemaProp.Nullable = IsRequiredType(propertyType) ? false : (bool?)null; //schemaProp.Required = IsRequiredType(propertyType) ? true : (bool?)null; } else { ParseDefinitions(schemas, propertyType, route, verb); schemaProp.Ref = "#/definitions/" + GetSchemaTypeName(propertyType); } return(schemaProp); }