Exemple #1
0
        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);
        }
Exemple #2
0
        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));
        }
Exemple #3
0
 public SchemaModel GetProperties(JimuServiceParameterDesc para, ISchemaFactory schemaFactory)
 {
     return(new SchemaModel(para.Name, new OpenApiSchema
     {
         Type = "object",
         Title = para.Comment,
         Properties = schemaFactory.GetProperties(para.Properties)
     }));
 }
Exemple #4
0
 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);
        }
Exemple #6
0
        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);
        }
Exemple #8
0
        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);
        }