예제 #1
0
        /// <summary>
        /// 获取JsonModle
        /// </summary>
        /// <param name="type">类型</param>
        /// <param name="propertyMembers">属性注释内容</param>
        /// <param name="depth">模型深度</param>
        /// <returns></returns>
        private void GetJsonModle(Type type, List <Member> propertyMembers, int depth, ref List <JsonModle> list)
        {
            List <FieldInfo>    fields     = type.GetFields().ToList();
            List <PropertyInfo> properties = type.GetProperties().ToList();
            string memberName_P            = string.Format("P:{0}.{1}.", type.Namespace, type.Name);
            string memberName_F            = string.Format("F:{0}.{1}.", type.Namespace, type.Name);

            foreach (FieldInfo field in fields)
            {
                JsonModle oldModel = list.Where(t => t.ColumName == field.Name).FirstOrDefault();
                if (oldModel != null)
                {
                    list.Remove(oldModel);
                }
                JsonModle jsonModel = new JsonModle();
                jsonModel.ColumName = field.Name;
                Member member = propertyMembers.Where(t => t.Name == (memberName_F + field.Name)).FirstOrDefault();
                if (member != null)
                {
                    jsonModel.ColumSummary = member.Summary.Value;
                }
                else
                {
                    jsonModel.ColumSummary = string.Empty;
                }
                jsonModel.ColumType      = GetTypeName(field.FieldType);
                jsonModel.ChildColumList = GetChildColumList(field.FieldType, propertyMembers, depth + 1);
                jsonModel.DefaultValue   = string.Empty;
                list.Add(jsonModel);
            }
            foreach (PropertyInfo property in properties)
            {
                JsonModle oldModel = list.Where(t => t.ColumName == property.Name).FirstOrDefault();
                if (oldModel != null)
                {
                    list.Remove(oldModel);
                }
                JsonModle jsonModel = new JsonModle();
                jsonModel.ColumName = property.Name;
                Member member = propertyMembers.Where(t => t.Name == (memberName_P + property.Name)).FirstOrDefault();
                if (member != null)
                {
                    jsonModel.ColumSummary = member.Summary.Value;
                }
                else
                {
                    jsonModel.ColumSummary = string.Empty;
                }
                jsonModel.ColumType      = GetTypeName(property.PropertyType);
                jsonModel.ChildColumList = GetChildColumList(property.PropertyType, propertyMembers, depth + 1);
                jsonModel.DefaultValue   = string.Empty;
                list.Add(jsonModel);
            }
            if (type.BaseType.Namespace != "System")
            {
                GetJsonModle(type.BaseType, propertyMembers, depth, ref list);
            }
        }
예제 #2
0
        /// <summary>
        /// 获取详细方法模型 根据控制器名称和方法名称
        /// </summary>
        /// <param name="ControllerName">控制器名称</param>
        /// <param name="MethodName">方法名称</param>
        /// <returns></returns>
        private MethodModel GetMethodModelByName(string ControllerName, string MethodName)
        {
            Assembly      asmb            = Assembly.LoadFrom(assemlyUrl);
            List <Member> propertyMembers = LoadXMLHelper.LoadXML().Where(t => t.PreWord == 'P' || t.PreWord == 'F').ToList();
            Member        member          = LoadXMLHelper.LoadXML().Where(t => t.PreWord == 'M' && t.ControllerName == ControllerName && t.MethodName == MethodName).FirstOrDefault();
            MethodModel   methodModel     = new MethodModel();

            if (member == null)
            {
                return(methodModel);
            }
            methodModel = new MethodModel(member);
            Type       type       = asmb.GetType(member.ControllerNamespace);
            MethodInfo methodInfo = type.GetMethod(member.MethodName);

            ParameterInfo[] paramInfoArr = methodInfo.GetParameters();
            foreach (ParameterInfo paramInfo in paramInfoArr)
            {
                JsonModle paramModel = new JsonModle();
                paramModel.ColumName = paramInfo.Name;
                Param param = member.ParamList.Where(t => t.Name == paramInfo.Name).FirstOrDefault();
                if (param != null)
                {
                    paramModel.ColumSummary = param.Value;
                }
                else
                {
                    paramModel.ColumSummary = string.Empty;
                }
                paramModel.ColumType      = GetTypeName(paramInfo.ParameterType);
                paramModel.ChildColumList = GetChildColumList(paramInfo.ParameterType, propertyMembers, 1);
                paramModel.DefaultValue   = paramInfo.DefaultValue.ToString();
                methodModel.ParamList.Add(paramModel);
            }
            //响应内容
            if (!string.IsNullOrWhiteSpace(member.Returns.AssemblyName) && !string.IsNullOrWhiteSpace(member.Returns.TypeFullName))
            {
                try
                {
                    string   return_assemlyUrl = System.AppDomain.CurrentDomain.RelativeSearchPath + "/" + member.Returns.AssemblyName;
                    Assembly return_asmb       = Assembly.LoadFrom(return_assemlyUrl);
                    Type     return_type       = return_asmb.GetType(member.Returns.TypeFullName);
                    methodModel.ReturnList = GetChildColumList(return_type, propertyMembers, 0);
                }
                catch { }
            }
            return(methodModel);
        }