示例#1
0
 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 }
     };
 }
示例#2
0
        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);
        }