public override OpenApiSchema CreateDefinitionSchema(Type type, SchemaRepository schemaRepository) { //Test to determine if the serializer will treat as string or not var describeAsString = JsonSerializer.Serialize(type.GetEnumValues().GetValue(0), _serializerOptions).StartsWith("\""); var schema = describeAsString ? EnumTypeMap[typeof(string)]() : EnumTypeMap[type.GetEnumUnderlyingType()](); if (describeAsString) { schema.Enum = type.GetEnumValues() .Cast <object>() .Select(value => { var stringValue = JsonSerializer.Serialize(value, _serializerOptions).Replace("\"", string.Empty); return(OpenApiAnyFactory.CreateFor(schema, stringValue)); }) .ToList(); } else { schema.Enum = type.GetEnumValues() .Cast <object>() .Select(value => OpenApiAnyFactory.CreateFor(schema, value)) .ToList(); } return(schema); }
public override OpenApiSchema CreateDefinitionSchema(Type type, SchemaRepository schemaRepository) { var jsonContract = _contractResolver.ResolveContract(type); var isNullable = type.IsNullable(out Type innerType); var enumType = isNullable ? innerType : type; var stringEnumConverter = (jsonContract.Converter as StringEnumConverter) ?? _serializerSettings.Converters.OfType <StringEnumConverter>().FirstOrDefault(); // Temporary shim to support obsolete config options if (stringEnumConverter == null && _generatorOptions.DescribeAllEnumsAsStrings) { stringEnumConverter = new StringEnumConverter(_generatorOptions.DescribeStringEnumsInCamelCase); } var schema = (stringEnumConverter != null) ? EnumTypeMap[typeof(string)]() : EnumTypeMap[enumType.GetEnumUnderlyingType()](); if (stringEnumConverter != null) { schema.Enum = enumType.GetMembers(BindingFlags.Public | BindingFlags.Static) .Select(member => { var memberAttribute = member.GetCustomAttributes <EnumMemberAttribute>().FirstOrDefault(); var stringValue = GetConvertedEnumName(stringEnumConverter, (memberAttribute?.Value ?? member.Name), (memberAttribute?.Value != null)); return(OpenApiAnyFactory.CreateFor(schema, stringValue)); }) .ToList(); } else { schema.Enum = enumType.GetEnumValues() .Cast <object>() .Select(value => OpenApiAnyFactory.CreateFor(schema, value)) .ToList(); } schema.Nullable = isNullable; return(schema); }