public ClassUnit Parse(bool earseAsync = true) { var nameSpaceName = ResponseType.GetCustomAttribute <WithNameSpaceAttribute>()?.NameSpace; if (nameSpaceName == null) { throw new ArgumentNullException("类型不存在特性WithNameSpaceAttribute"); } var classOpts = ResponseType.GetCustomAttributes <WithClassOptionAttribute>(); var classOptions = new List <string>(classOpts != null ? classOpts.Count() : 5); if (classOpts != null) { classOptions.AddRange(classOpts.Select(c => c.GetOption())); } var controllerName = ResponseType.GetCustomAttribute <ControllerNameAttribute>()?.Name; if (controllerName == null) { controllerName = ResponseType.Name.Replace("Response", "Controller"); } var methodUnits = new List <MethodUnit>(MethodInfos.Count()); foreach (var item in MethodInfos) { var name = item.Name; if (earseAsync && name != "Async") { name = name.Replace("Async", string.Empty); } var options = item.GetCustomAttributes <WithMethodOptionAttribute>().Select(m => m.GetOption()); var pars = item.GetParameters(); var isAsync = item.GetCustomAttribute <AsyncStateMachineAttribute>() != null; var pus = new List <ParamterUnit>(pars.Length); foreach (var p in pars) { var parName = p.Name; var parType = p.ParameterType.Name; if (p.ParameterType.IsGenericType && p.ParameterType.GetGenericTypeDefinition() == (typeof(Nullable <>))) { parType = p.ParameterType.GetGenericArguments()[0].Name + "?"; } if (p.HasDefaultValue) { if (p.ParameterType.IsClass) { parName += "=null"; } else { parName += $"={p.DefaultValue}"; } } var parOptions = p.GetCustomAttributes <WithParamtersAttribute>().Select(par => par.GetOption()); pus.Add(new ParamterUnit(parName, parType, parOptions)); } var codes = pars.SelectMany(p => p.GetCustomAttributes <CodeAttribute>()); methodUnits.Add(new MethodUnit(name, isAsync, options, codes, pus)); } return(new ClassUnit(ResponseType.Name, nameSpaceName, controllerName, classOptions, methodUnits)); }