private static Definition ConvertTypeToDefinition(Type definitionType, IList<string> hiddenTags, Stack<Type> typesStack) { var schema = new DefinitionSchema { Name = definitionType.FullName }; ProcessTypeAttributes(definitionType, schema); // process schema.TypeFormat = Helpers.MapSwaggerType(definitionType, null); if (schema.TypeFormat.Type == ParameterType.String && schema.TypeFormat.Format == "enum") { schema.Enum = new List<string>(); List<string> listOfEnumNames = definitionType.GetEnumNames().ToList(); foreach (string enumName in listOfEnumNames) { schema.Enum.Add(GetEnumMemberValue(definitionType, enumName)); } } else { ProcessProperties(definitionType, schema, hiddenTags, typesStack); } return new Definition { Schema = schema }; }
private static void ProcessTypeAttributes(Type definitionType, DefinitionSchema schema) { var descAttr = definitionType.GetCustomAttribute<DescriptionAttribute>(); if (descAttr != null) schema.Description = descAttr.Description; var definitionAttr = definitionType.GetCustomAttribute<SwaggerWcfDefinitionAttribute>(); if (definitionAttr != null) { if (!string.IsNullOrWhiteSpace(definitionAttr.ExternalDocsDescription) || !string.IsNullOrWhiteSpace(definitionAttr.ExternalDocsUrl)) { schema.ExternalDocumentation = new ExternalDocumentation { Description = definitionAttr.ExternalDocsDescription, Url = definitionAttr.ExternalDocsUrl }; } } }
private static void ProcessProperties(Type definitionType, DefinitionSchema schema, IList<string> hiddenTags, Stack<Type> typesStack) { PropertyInfo[] properties = definitionType.GetProperties(); schema.Properties = new List<DefinitionProperty>(); foreach (PropertyInfo propertyInfo in properties) { DefinitionProperty prop = ProcessProperty(propertyInfo, hiddenTags, typesStack); if (prop == null) continue; if (prop.Required) schema.Required.Add(prop.Title); schema.Properties.Add(prop); } }