/// <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)); }