Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
 /// <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)));
 }
Esempio n. 3
0
        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);
                }
            }
        }