/// <summary> /// 将网关参数转为类型 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="namingCase">字符串策略</param> /// <returns></returns> public T ToObject <T>(NamingCase namingCase) { var type = typeof(T); var obj = Activator.CreateInstance(type); var properties = type.GetProperties(); foreach (var item in properties) { var renameAttribute = item.GetCustomAttributes(typeof(NamingAttribute), true); string key; if (renameAttribute.Length > 0) { key = ((NamingAttribute)renameAttribute[0]).Name; } else { switch (namingCase) { case NamingCase.Camel: key = item.Name.ToCamelCase(); break; case NamingCase.Snake: key = item.Name.ToSnakeCase(); break; default: key = item.Name; break; } } if (TryGetValue(key, out var value)) { item.SetValue(obj, Convert.ChangeType(value, item.PropertyType)); } } return((T)obj); }
/// <summary> /// 异步将网关参数转为类型 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="namingCase">字符串策略</param> /// <returns></returns> public async Task <T> ToObjectAsync <T>(NamingCase namingCase) { return(await Task.Run(() => ToObject <T>(namingCase))); }
private void Add(IEnumerable <MemberInfo> info, object obj, NamingCase namingCase) { foreach (var item in info) { var notAddattributes = item.GetCustomAttributes(typeof(IgnoreAttribute), true); if (notAddattributes.Length > 0) { continue; } string key; object value; var renameAttribute = item.GetCustomAttributes(typeof(NamingAttribute), true); if (renameAttribute.Length > 0) { key = ((NamingAttribute)renameAttribute[0]).Name; } else { switch (namingCase) { case NamingCase.Camel: key = item.Name.ToCamelCase(); break; case NamingCase.Snake: key = item.Name.ToSnakeCase(); break; default: key = item.Name; break; } } switch (item.MemberType) { case MemberTypes.Field: value = ((FieldInfo)item).GetValue(obj); break; case MemberTypes.Property: value = ((PropertyInfo)item).GetValue(obj); break; default: throw new NotImplementedException(); } if (value is null || string.IsNullOrEmpty(value.ToString())) { continue; } if (ContainsKey(key)) { this[key] = value; } else { Add(key, value); } } }