Ejemplo n.º 1
0
        public static T ConvertFromRedis <T>(this HashEntry[] hashEntries)
        {
            PropertyInfo[] properties = typeof(T).GetProperties();
            var            obj        = Activator.CreateInstance(typeof(T));

            foreach (var property in properties)
            {
                HashEntry entry = hashEntries.FirstOrDefault(g => g.Name.ToString().Equals(property.Name));
                if ((entry.Equals(new HashEntry())))
                {
                    continue;
                }

                if ((property.PropertyType.Name.Contains("List") || property.PropertyType.IsClass))
                {
                    property.SetValue(obj, JsonConvert.DeserializeObject(entry.Value.ToString(), property.PropertyType));

                    continue;
                }

                else
                {
                    property.SetValue(obj, Convert.ChangeType(entry.Value.ToString(), property.PropertyType));
                }
            }
            return((T)obj);
        }
        /// <summary>
        /// Converts a set of hash entries to a POCO
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="hashEntries"></param>
        /// <returns></returns>
        public static T ConvertFromRedis <T>(HashEntry[] hashEntries)
        {
            var properties = typeof(T).GetProperties();
            var obj        = Activator.CreateInstance(typeof(T));

            foreach (var property in properties)
            {
                var redisFieldInfo = property.CustomAttributes
                                     .FirstOrDefault(x => x.AttributeType.Name == nameof(RedisHashFieldAttribute));
                var redisPropertyName = property.Name;

                if (redisFieldInfo != null)
                {
                    redisPropertyName = redisFieldInfo.ConstructorArguments[0].Value.ToString();
                }

                HashEntry entry = hashEntries.FirstOrDefault(g => g.Name.ToString().Equals(redisPropertyName));

                if (entry.Equals(new HashEntry()))
                {
                    continue;
                }
                if (property.PropertyType == typeof(String[]))
                {
                    String[] blah = new [] { entry.Value.ToString() };
                    property.SetValue(obj, Convert.ChangeType(blah, property.PropertyType));
                }
                else
                {
                    property.SetValue(obj, Convert.ChangeType(entry.Value.ToString(), property.PropertyType));
                }
            }
            return((T)obj);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 轉換HashEntry到Class
        /// 若該Class成員有JsonPropertyAttribute則使用該Attribute的Name作為Key
        /// </summary>
        /// <typeparam name="T">目標類型</typeparam>
        /// <param name="hashEntries">Hash Entries</param>
        /// <returns></returns>
        public T Deserialize <T>(IEnumerable <HashEntry> hashEntries)
        {
            PropertyInfo[] properties = typeof(T).GetProperties();
            var            obj        = Activator.CreateInstance(typeof(T));

            foreach (var property in properties)
            {
                string name = GetPropertyNameFunc(property);

                HashEntry entry = hashEntries.FirstOrDefault(g => g.Name.ToString().Equals(name));
                if (entry.Equals(new HashEntry()))
                {
                    continue;
                }

                if (CustomDeserializeFunc.ContainsKey(property.PropertyType))
                {
                    property.SetValue(obj, CustomDeserializeFunc[property.PropertyType](entry.Value, property.PropertyType));
                }
                else
                {
                    property.SetValue(obj, DefaultDeserialize(entry.Value, property.PropertyType));
                }
            }
            return((T)obj);
        }
Ejemplo n.º 4
0
        //Deserialize from Redis format
        public static T ConvertFromRedis <T>(this HashEntry[] hashEntries)
        {
            if (!hashEntries.Any())
            {
                return(default(T)); //null for nullable value, 0 for int, '\0' for char etc
            }
            PropertyInfo[] properties = typeof(T).GetProperties();
            var            obj        = Activator.CreateInstance(typeof(T));

            foreach (var property in properties)
            {
                HashEntry entry = hashEntries.FirstOrDefault(g => g.Name.ToString().Equals(property.Name));
                if (entry.Equals(new HashEntry()))
                {
                    continue;
                }
                if (!property.CanWrite)
                {
                    continue;                     //skip read only
                }
                var type  = property.PropertyType;
                var value = GetValue(type, entry.Value);
                property.SetValue(obj, value);
            }

            return((T)obj);
        }
        /// <summary>
        /// Converts the given hashset into object of type T
        /// </summary>
        /// <typeparam name="T">type of object</typeparam>
        /// <param name="hashEntries">list of hashentry</param>
        /// <returns>object of type T</returns>
        protected T FromHasSet <T>(HashEntry[] hashEntries)
        {
            PropertyInfo[] properties = typeof(T).GetProperties();
            var            obj        = Activator.CreateInstance(typeof(T));

            foreach (var property in properties)
            {
                HashEntry entry
                    = hashEntries.FirstOrDefault(
                          g => g.Name.ToString().Equals(property.Name));

                if (entry.Equals(new HashEntry()))
                {
                    continue;
                }

                if (entry.Value.HasValue)
                {
                    property.SetValue(obj,
                                      Convert.ChangeType(
                                          Convert.ToString(entry.Value),
                                          property.PropertyType));
                }
            }

            return((T)obj);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 轉換HashEntry到Class
        /// 若該Class成員有JsonPropertyAttribute則使用該Attribute的Name作為Key
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="hashEntries"></param>
        /// <returns></returns>
        public static T ConvertHashEntriesToJsonClass <T>(this IEnumerable <HashEntry> hashEntries)
        {
            PropertyInfo[] properties = typeof(T).GetProperties();
            var            obj        = Activator.CreateInstance(typeof(T));

            foreach (var property in properties)
            {
                var       attr  = property.GetCustomAttribute <JsonPropertyAttribute>();
                string    name  = attr.IsNonNull() ? attr.PropertyName : property.Name;
                HashEntry entry = hashEntries.FirstOrDefault(g => g.Name.ToString().Equals(name));
                if (entry.Equals(new HashEntry()))
                {
                    continue;
                }

                if (property.PropertyType.IsArray)
                {
                    property.SetValue(obj, JsonConvert.DeserializeObject(entry.Value.ToString(), property.PropertyType));
                }
                else
                {
                    property.SetValue(obj, Convert.ChangeType(entry.Value.ToString(), property.PropertyType));
                }
            }
            return((T)obj);
        }
Ejemplo n.º 7
0
        //Deserialize from Redis format
        public static T ConvertFromRedis <T>(this HashEntry[] hashEntries)
        {
            var properties = typeof(T).GetProperties();
            var obj        = Activator.CreateInstance(typeof(T));

            foreach (var property in properties)
            {
                HashEntry entry = hashEntries.FirstOrDefault(g => g.Name.ToString().Equals(property.Name));
                if (entry.Equals(new HashEntry()))
                {
                    continue;
                }
                property.SetValue(obj, Convert.ChangeType(entry.Value.ToString(), property.PropertyType));
            }
            return((T)obj);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// HashEntity转换为对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="hashEntries"></param>
        /// <returns></returns>
        public static T ToObjFromRedis <T>(this HashEntry[] hashEntries)
        {
            PropertyInfo[] properties = typeof(T).GetProperties().Where(p => p.CanWrite).ToArray();
            var            obj        = Activator.CreateInstance <T>();

            foreach (var property in properties)
            {
                Type[]    types     = property.PropertyType.GenericTypeArguments;
                HashEntry hashEntry = hashEntries.FirstOrDefault(h => h.Name.ToString().Equals(property.Name, StringComparison.CurrentCultureIgnoreCase));
                if (hashEntry.Equals(default(HashEntry)))
                {
                    continue;
                }
                if (types.Length > 0)
                {
                    var fullName = types[0].FullName;
                    if (fullName != null && fullName.IndexOf("System", StringComparison.Ordinal) != -1)
                    {
                        property.SetValue(obj, Convert.ChangeType(hashEntry.Value, types[0]), null);
                    }
                    else if (types[0].BaseType == typeof(Enum))
                    {
                        property.SetValue(obj, Enum.Parse(types[0], hashEntry.Value.ToString()), null);
                    }
                    else
                    {
                        property.SetValue(obj, Convert.ChangeType(hashEntry.Value, property.PropertyType),
                                          null);
                    }
                }
                else
                {
                    if (property.PropertyType.BaseType == typeof(Enum))
                    {
                        property.SetValue(obj, Enum.Parse(property.PropertyType, hashEntry.Value),
                                          null);
                    }
                    else
                    {
                        property.SetValue(obj, Convert.ChangeType(hashEntry.Value, property.PropertyType),
                                          null);
                    }
                }
            }
            return(obj);
        }
Ejemplo n.º 9
0
        //build object from hash entry array using reflection
        T MapFromHash(HashEntry[] hash)
        {
            PropertyInfo[] properties = typeof(T).GetProperties();
            var            obj        = (T)Activator.CreateInstance(TypeOfT);//new instance of T

            foreach (var property in properties)
            {
                HashEntry entry = hash.FirstOrDefault(g => g.Name.ToString().Equals(property.Name));
                if (entry.Equals(new HashEntry()))
                {
                    continue;
                }
                property.SetValue(obj, Convert.ChangeType(entry.Value.ToString(), property.PropertyType));
            }



            return(obj);
        }
        //Deserialize from Redis format
        public static T ConvertFromRedis <T>(this HashEntry[] hashEntries)
        {
            PropertyInfo[] properties = typeof(T).GetProperties();
            object         obj        = Activator.CreateInstance(typeof(T));

            foreach (var property in properties)
            {
                Type t = property.PropertyType;
                if (IsPrimitive(t))
                {
                    HashEntry entry = hashEntries.FirstOrDefault(g => g.Name.ToString().Equals(property.Name));
                    if (entry.Equals(new HashEntry()))
                    {
                        continue;
                    }
                    if (entry.Value.HasValue && !string.IsNullOrEmpty(entry.Value.ToString()))
                    {
                        property.SetValue(obj, Convert.ChangeType(entry.Value.ToString(), property.PropertyType));
                    }
                }
            }
            return((T)obj);
        }
Ejemplo n.º 11
0
        static T ToEntity <T>(HashEntry[] hashEntries)
        {
            Type t = typeof(T);

            PropertyInfo[] properties = t.GetProperties();
            var            obj        = Activator.CreateInstance(typeof(T));

            foreach (var property in properties)
            {
                HashEntry entry = hashEntries.FirstOrDefault(g => g.Name.ToString().Equals(property.Name));
                if (entry.Equals(new HashEntry()))
                {
                    continue;
                }

                object value = null;
                if (!property.PropertyType.IsGenericType)
                {
                    value = Convert.ChangeType(entry.Value.ToString(), property.PropertyType);
                }
                else
                {
                    Type genericTypeDefinition = property.PropertyType.GetGenericTypeDefinition();
                    if (genericTypeDefinition == typeof(Nullable <>))
                    {
                        if (entry.Value.HasValue)
                        {
                            value = Convert.ChangeType(entry.Value.ToString(), Nullable.GetUnderlyingType(property.PropertyType));
                        }
                    }
                }

                property.SetValue(obj, value);
            }
            return((T)obj);
        }