public static T CreateItem <T>(DataRow row) { T obj = default(T); if (row != null) { obj = Activator.CreateInstance <T>(); foreach (DataColumn column in row.Table.Columns) { PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName); if (prop == null) { continue; } Type type = prop.PropertyType; try { object value = row[column.ColumnName]; if (value != DBNull.Value) { if (column.ColumnName.Contains("json")) { prop.SetValue(obj, MessageConvert.DeserializeObject(("" + value).Replace("$", ""), type), null); } else if (type.Name == "String") { prop.SetValue(obj, Convert.ToString(value), null); } else if (type.Name == "Single") { prop.SetValue(obj, Convert.ToSingle(value), null); } else if (type.Name == "Nullable`1" || type.Name == "DateTime") { var t = Nullable.GetUnderlyingType(type) ?? type; var safeValue = (value == null) ? null : Convert.ChangeType(value, t); prop.SetValue(obj, safeValue, null); } else { prop.SetValue(obj, value, null); } } } catch { // You can log something here throw; } } } return(obj); }
public static T DeepClone <T>(this T a) { string mess = MessageConvert.SerializeObject(a); return(mess.DeserializeObject <T>()); }