/// <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);
        }
 public void RegisterCustomDeserializeFunc(Type type, CustomDeserializeFunc deserialize)
 {
     if (null != deserialize && !deserializeDic.ContainsKey(type))
     {
         deserializeDic.Add(type, deserialize);
     }
 }
 public bool TryGetDeserializeFunc(Type type, out CustomDeserializeFunc deserializeFunc)
 {
     return(deserializeDic.TryGetValue(type, out deserializeFunc));
 }