public object FromJson(ITopReader reader, Type type) { object rsp = null; var pas = GetTopAttributes(type); var em = pas.GetEnumerator(); while (em.MoveNext()) { var kvp = em.Current; var ta = kvp.Value; var itemName = ta.ItemName; var listName = ta.ListName; if (!reader.HasReturnField(itemName) && (string.IsNullOrEmpty(listName) || !reader.HasReturnField(listName))) { continue; } object value = null; if (ta.ListType != null) { value = reader.GetListObjects(listName, itemName, ta.ListType, FromJson); } else { if (typeof(string) == ta.ItemType) { var tmp = reader.GetPrimitiveObject(itemName); if (tmp != null) { value = tmp.ToString(); } } else if (typeof(long) == ta.ItemType) { var tmp = reader.GetPrimitiveObject(itemName); if (tmp != null) { value = ((IConvertible)tmp).ToInt64(null); } } else if (typeof(int) == ta.ItemType) { var tmp = reader.GetPrimitiveObject(itemName); if (tmp != null) { value = ((IConvertible)tmp).ToInt32(null); } } else if (typeof(bool) == ta.ItemType) { value = ((reader.GetPrimitiveObject(itemName) ?? "").ToString().Equals("true", StringComparison.CurrentCultureIgnoreCase)); } else { value = reader.GetReferenceObject(itemName, ta.ItemType, FromJson); } } if (value != null) { if (rsp == null) { rsp = Activator.CreateInstance(type); } ta.Method.Invoke(rsp, new object[] { value }); } } return(rsp); }
public object FromJson(ITopReader reader, Type type) { object rsp = null; Dictionary <string, TopAttribute> pas = GetTopAttributes(type); Dictionary <string, TopAttribute> .Enumerator em = pas.GetEnumerator(); while (em.MoveNext()) { KeyValuePair <string, TopAttribute> kvp = em.Current; TopAttribute ta = kvp.Value; string itemName = ta.ItemName; string listName = ta.ListName; if (!reader.HasReturnField(itemName) && (string.IsNullOrEmpty(listName) || !reader.HasReturnField(listName))) { continue; } object value = null; if (ta.ListType != null) { value = reader.GetListObjects(listName, itemName, ta.ListType, FromJson); } else { if (typeof(string) == ta.ItemType) { object tmp = reader.GetPrimitiveObject(itemName); if (typeof(string) == tmp.GetType()) { value = tmp; } else { if (tmp != null) { value = JSON.ToJSON(tmp); } } } else if (typeof(long) == ta.ItemType) { object tmp = reader.GetPrimitiveObject(itemName); if (typeof(long) == tmp.GetType()) { value = tmp; } else { if (tmp != null) { value = long.Parse(tmp.ToString()); } } } else if (typeof(bool) == ta.ItemType) { object tmp = reader.GetPrimitiveObject(itemName); if (typeof(bool) == tmp.GetType()) { value = tmp; } else { if (tmp != null) { value = bool.Parse(tmp.ToString()); } } } else { value = reader.GetReferenceObject(itemName, ta.ItemType, FromJson); } } if (value != null) { if (rsp == null) { rsp = Activator.CreateInstance(type); } ta.Method.Invoke(rsp, new object[] { value }); } } return(rsp); }