private List <JimuServiceParameterDesc> GetParameters(MethodInfo method) { //StringBuilder sb = new StringBuilder(); var paras = new List <JimuServiceParameterDesc>(); var paraComments = method.GetCustomAttributes <JimuFieldCommentAttribute>(); foreach (var para in method.GetParameters()) { var paraDesc = new JimuServiceParameterDesc { Name = para.Name, Type = para.ParameterType.ToString(), Comment = paraComments.FirstOrDefault(x => x.FieldName == para.Name)?.Comment, }; if (para.ParameterType.IsClass && !para.ParameterType.FullName.StartsWith("System.")) { //var t = Activator.CreateInstance(para.ParameterType); //sb.Append($"\"{para.Name}\":{_serializer.Serialize<string>(t)},"); //sb.Append($"\"{para.Name}\":{{{GetCustomTypeMembers(para.ParameterType)}}},"); paraDesc.Format = $"{{{ GetCustomTypeMembers(para.ParameterType)}}}"; } else { paraDesc.Format = $"{para.ParameterType.ToString()}"; //sb.Append($"\"{para.Name}\":\"{para.ParameterType.ToString()}\","); } paras.Add(paraDesc); } //return "{" + sb.ToString().TrimEnd(',') + "}"; return(paras); }
public SchemaModel GetProperties(JimuServiceParameterDesc para, ISchemaFactory schemaFactory) { var schema = new OpenApiSchema { Type = "array", Title = para.Comment, }; var props = schemaFactory.GetProperties(para.Properties); var dicSchema = new OpenApiSchema(); if (props["value"].Properties != null && props["value"].Properties.Any()) { dicSchema.Properties.Add(props["key"].Type, new OpenApiSchema { Properties = props["value"].Properties }); } else { dicSchema.Properties.Add(props["key"].Type, props["value"]); } schema.Items = dicSchema; return(new SchemaModel(para.Name, schema)); }
public SchemaModel GetProperties(JimuServiceParameterDesc para, ISchemaFactory schemaFactory) { return(new SchemaModel(para.Name, new OpenApiSchema { Type = "object", Title = para.Comment, Properties = schemaFactory.GetProperties(para.Properties) })); }
public SchemaModel GetProperties(JimuServiceParameterDesc para, ISchemaFactory schemaFactory) { return(new SchemaModel(para.Name, new OpenApiSchema { Type = "string", Format = "date-time", Title = para.Comment })); }
private List <JimuServiceParameterDesc> GetParameters(MethodInfo method) { //StringBuilder sb = new StringBuilder(); var paras = new List <JimuServiceParameterDesc>(); var paraComments = method.GetCustomAttributes <JimuFieldCommentAttribute>(); var xml = GetXmlComment(method.DeclaringType); var key = XmlCommentsMemberNameHelper.GetMemberNameForMethod(method); var hasNode = false; XPathNavigator node = null; if (xml != null) { hasNode = xml.TryGetValue(key, out node); } foreach (var para in method.GetParameters()) { var paraDesc = new JimuServiceParameterDesc { Name = para.Name, Type = para.ParameterType.ToString(), Comment = paraComments.FirstOrDefault(x => x.FieldName == para.Name)?.Comment, }; if (string.IsNullOrEmpty(paraDesc.Comment) && hasNode) { var paraNode = node.SelectSingleNode($"param[@name='{para.Name}']"); if (paraNode != null) { paraDesc.Comment = paraNode.Value.Trim(); } } if (para.ParameterType.IsClass && !para.ParameterType.FullName.StartsWith("System.")) { //var t = Activator.CreateInstance(para.ParameterType); //sb.Append($"\"{para.Name}\":{_serializer.Serialize<string>(t)},"); //sb.Append($"\"{para.Name}\":{{{GetCustomTypeMembers(para.ParameterType)}}},"); paraDesc.Format = $"{{{ GetCustomTypeMembers(para.ParameterType)}}}"; } else { paraDesc.Format = $"{para.ParameterType.ToString()}"; //sb.Append($"\"{para.Name}\":\"{para.ParameterType.ToString()}\","); } paras.Add(paraDesc); } //return "{" + sb.ToString().TrimEnd(',') + "}"; return(paras); }
public SchemaModel GetProperties(JimuServiceParameterDesc para, ISchemaFactory schemaFactory) { var model = new SchemaModel(para.Name, new OpenApiSchema { Type = para.Type, Title = para.Comment, }); if (!string.IsNullOrEmpty(para.Default)) { try { switch (model.Value.Type) { case "string": model.Value.Example = new OpenApiString(para.Default); break; case "integer": model.Value.Example = new OpenApiInteger(Convert.ToInt32(para.Default)); break; case "number": model.Value.Example = new OpenApiDouble(Convert.ToDouble(para.Default)); break; case "datetime": model.Value.Example = new OpenApiDateTime(Convert.ToDateTime(para.Default)); break; case "boolean": model.Value.Example = new OpenApiBoolean(Convert.ToBoolean(para.Default)); break; default: break; } } catch { } } return(model); }
private List <JimuServiceParameterDesc> GetParameters(MethodInfo method) { //StringBuilder sb = new StringBuilder(); var paras = new List <JimuServiceParameterDesc>(); var paraComments = method.GetCustomAttributes <JimuFieldCommentAttribute>(); var xml = GetXmlComment(method.DeclaringType); var key = XmlCommentsMemberNameHelper.GetMemberNameForMethod(method); var hasNode = false; XPathNavigator node = null; if (xml != null) { hasNode = xml.TryGetValue(key, out node); } foreach (var para in method.GetParameters()) { var paraComment = paraComments.FirstOrDefault(x => x.FieldName == para.Name); var paraDesc = new JimuServiceParameterDesc { Name = para.Name, Type = para.ParameterType.ToString(), Comment = paraComment?.Comment, Default = paraComment?.Default }; if (string.IsNullOrEmpty(paraDesc.Comment) && hasNode) { var paraNode = node.SelectSingleNode($"param[@name='{para.Name}']"); if (paraNode != null) { paraDesc.Comment = paraNode.Value.Trim(); } } if (para.ParameterType.IsClass && !para.ParameterType.FullName.StartsWith("System.")) { paraDesc.Properties = GetProperties(para.ParameterType); } paras.Add(paraDesc); } return(paras); }
public SchemaModel GetProperties(JimuServiceParameterDesc para, ISchemaFactory schemaFactory) { var schema = new OpenApiSchema { Type = "array", Title = para.Comment }; if (para.Properties != null && para.Properties.Count == 1 && (para.Properties.First().Properties == null || !para.Properties.First().Properties.Any())) { schema.Items = new OpenApiSchema { Type = para.Properties.First().Type }; } else { schema.Items = new OpenApiSchema { Properties = schemaFactory.GetProperties(para.Properties) }; } return(new SchemaModel(para.Name, schema)); }
private List <JimuServiceParameterDesc> GetProperties(Type customType, int level = 0, string specifyName = null) { if (level > 3 || customType == null) { return(null); } level++; StringBuilder sb = new StringBuilder();; var xmlNode = GetXmlComment(customType); List <JimuServiceParameterDesc> list = new List <JimuServiceParameterDesc>(); if (customType.IsArray) { var arrayBaseType = customType.Assembly.ExportedTypes.FirstOrDefault(x => x.FullName == customType.FullName.TrimEnd('[', ']')); return(new List <JimuServiceParameterDesc> { new JimuServiceParameterDesc { Name = specifyName ?? customType.Name, //Type = customType.ToString().TrimEnd('[',']') Type = customType.ToString(), Properties = GetProperties(arrayBaseType) } }); } else if (customType.IsEnum) { return(new List <JimuServiceParameterDesc> { new JimuServiceParameterDesc { Name = specifyName ?? customType.Name, Type = "System.Int", } }); } else if (!customType.GetProperties().Any() || (customType.FullName.StartsWith("System.") && !customType.FullName.StartsWith("System.Collections"))) { if (customType.FullName.StartsWith("System.")) { return(new List <JimuServiceParameterDesc> { new JimuServiceParameterDesc { Name = specifyName ?? customType.Name, Type = customType.ToString(), } }); } return(null); } foreach (var prop in customType.GetProperties()) { var comment = prop.GetCustomAttribute <JimuFieldCommentAttribute>(); //var proComment = comment == null ? "" : (" | " + comment?.Comment); var proComment = comment == null ? "" : ("" + comment?.Comment); var key = XmlCommentsMemberNameHelper.GetMemberNameForMember(prop); if (comment == null && xmlNode != null && xmlNode.TryGetValue(key, out var node)) { //proComment = $" | " + node.Value.Trim(); proComment = node.Value.Trim(); } proComment = FilterJson(proComment); var paraDesc = new JimuServiceParameterDesc { Comment = proComment, Name = prop.Name, Type = prop.PropertyType.ToString(), }; if (prop.PropertyType.IsArray) { paraDesc.Properties = new List <JimuServiceParameterDesc> { new JimuServiceParameterDesc { Type = prop.PropertyType.ToString().TrimEnd('[', ']') } }; } if (prop.PropertyType.IsClass && !prop.PropertyType.FullName.StartsWith("System.")) { paraDesc.Properties = GetProperties(prop.PropertyType, level); } else if (prop.PropertyType.IsClass && prop.PropertyType.FullName.StartsWith("System.Collections.Generic.List") && prop.PropertyType.GenericTypeArguments.Length == 1 ) { paraDesc.Properties = GetProperties(prop.PropertyType.GenericTypeArguments[0], level); } else if (prop.PropertyType.IsClass && prop.PropertyType.FullName.StartsWith("System.Collections.Generic.Dictionary")) { var keyPros = GetProperties(prop.PropertyType.GenericTypeArguments[0], level, "key"); var valPros = GetProperties(prop.PropertyType.GenericTypeArguments[1], level, "value"); if (valPros.Count > 1) { keyPros.Add(new JimuServiceParameterDesc { Name = "value", Properties = valPros }); } else { keyPros.AddRange(valPros); } paraDesc.Properties = keyPros; } list.Add(paraDesc); } return(list); }