Exemplo n.º 1
0
        private string GetCustomTypeMembers(Type customType, int level = 0)
        {
            if (level > 3)
            {
                return("");
            }

            level++;
            StringBuilder sb      = new StringBuilder();;
            var           xmlNode = GetXmlComment(customType);

            foreach (var prop in customType.GetProperties())
            {
                var comment    = prop.GetCustomAttribute <JimuFieldCommentAttribute>();
                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 = FilterJson(proComment);

                if (prop.PropertyType.IsClass &&
                    !prop.PropertyType.FullName.StartsWith("System."))
                {
                    sb.Append($"\"{prop.Name}\":{{{GetCustomTypeMembers(prop.PropertyType, level)}}},");
                }
                else if (prop.PropertyType.IsClass &&
                         prop.PropertyType.FullName.StartsWith("System.Collections.Generic.List") &&
                         prop.PropertyType.GenericTypeArguments.Length == 1
                         )
                {
                    if (prop.PropertyType.GenericTypeArguments[0].FullName.StartsWith("System."))
                    {
                        sb.Append($"\"{prop.Name}\":\"[{prop.PropertyType.GenericTypeArguments[0].FullName}]\",");
                    }
                    else
                    {
                        sb.Append($"\"{prop.Name}\":[{{{GetCustomTypeMembers(prop.PropertyType.GenericTypeArguments[0], level)}}}],");
                    }
                }
                else if (prop.PropertyType.IsClass &&
                         prop.PropertyType.FullName.StartsWith("System.Collections.Generic.Dictionary"))
                {
                    sb.Append($"\"{prop.Name}\":\"{prop.PropertyType.ToString().Replace("System.Collections.Generic.Dictionary`2", "")}{proComment}\",");
                }
                else
                {
                    sb.Append($"\"{prop.Name}\":\"{prop.PropertyType.ToString()}{proComment}\",");
                }
            }
            return(sb.ToString().TrimEnd(','));
        }
Exemplo n.º 2
0
        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);
        }