#region Method1 /// <summary> /// 将object对象转换为实体对象 /// </summary> /// <typeparam name="T">实体对象类名</typeparam> /// <param name="asObject">object对象</param> /// <returns></returns> private T ConvertObject<T>(object asObject) where T : new() { //创建实体对象实例 var t = Activator.CreateInstance<T>(); if (asObject != null) { Type type = asObject.GetType(); //遍历实体对象属性 foreach (var info in typeof(T).GetProperties()) { object obj = null; //取得object对象中此属性的值 var val = type.GetProperty(info.Name)?.GetValue(asObject); if (val != null) { //非泛型 if (!info.PropertyType.IsGenericType) obj = Convert.ChangeType(val, info.PropertyType); else//泛型Nullable<> { Type genericTypeDefinition = info.PropertyType.GetGenericTypeDefinition(); if (genericTypeDefinition == typeof(Nullable<>)) { obj = Convert.ChangeType(val, Nullable.GetUnderlyingType(info.PropertyType)); } else { obj = Convert.ChangeType(val, info.PropertyType); } } info.SetValue(t, obj, null); } } } return t; } #endregion
View Code
#region Method2 /// <summary> /// 将object对象转换为实体对象 /// </summary> /// <typeparam name="T">实体对象类名</typeparam> /// <param name="asObject">object对象</param> /// <returns></returns> public static T ConvertObjectByJson<T>(object asObject) where T : new() { var serializer = new JavaScriptSerializer(); //将object对象转换为json字符 var json = serializer.Serialize(asObject); //将json字符转换为实体对象 var t = serializer.Deserialize<T>(json); return t; } #endregion
View Code
#region Method3 /// <summary> /// 将object尝试转为指定对象 /// </summary> /// <param name="data"></param> /// <returns></returns> public static T ConvertObjToModel<T>(object data) where T : new() { if (data == null) return new T(); // 定义集合 T result = new T(); // 获得此模型的类型 Type type = typeof(T); string tempName = ""; // 获得此模型的公共属性 PropertyInfo[] propertys = result.GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { tempName = pi.Name; // 检查object是否包含此列 // 判断此属性是否有Setter if (!pi.CanWrite) continue; try { object value = GetPropertyValue(data, tempName); if (value != DBNull.Value) { Type tempType = pi.PropertyType; pi.SetValue(result, GetDataByType(value, tempType), null); } } catch { } } return result; } /// <summary> /// 获取一个类指定的属性值 /// </summary> /// <param name="info">object对象</param> /// <param name="field">属性名称</param> /// <returns></returns> public static object GetPropertyValue(object info, string field) { if (info == null) return null; Type t = info.GetType(); IEnumerable<System.Reflection.PropertyInfo> property = from pi in t.GetProperties() where pi.Name.ToLower() == field.ToLower() select pi; return property.First().GetValue(info, null); } /// <summary> /// 将数据转为制定类型 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="data1"></param> /// <returns></returns> public static object GetDataByType(object data1, Type itype, params object[] myparams) { object result = new object(); try { if (itype == typeof(decimal)) { result = Convert.ToDecimal(data1); if (myparams.Length > 0) { result = Convert.ToDecimal(Math.Round(Convert.ToDecimal(data1), Convert.ToInt32(myparams[0]))); } } else if (itype == typeof(double)) { if (myparams.Length > 0) { result = Convert.ToDouble(Math.Round(Convert.ToDouble(data1), Convert.ToInt32(myparams[0]))); } else { result = double.Parse(Convert.ToDecimal(data1).ToString("0.00")); } } else if (itype == typeof(Int32)) { result = Convert.ToInt32(data1); } else if (itype == typeof(DateTime)) { result = Convert.ToDateTime(data1); } else if (itype == typeof(Guid)) { result = new Guid(data1.ToString()); } else if (itype == typeof(string)) { result = data1.ToString(); } } catch { if (itype == typeof(decimal)) { result = 0; } else if (itype == typeof(double)) { result = 0; } else if (itype == typeof(Int32)) { result = 0; } else if (itype == typeof(DateTime)) { result = null; } else if (itype == typeof(Guid)) { result = Guid.Empty; } else if (itype == typeof(string)) { result = ""; } } return result; } #endregion
View Code
#region Invoking
/// <summary>
/// test
/// </summary>
public void test()
{
var obj = new
{
id = 1,
name = "张三",
sex = 1,
age = 22
};
//转换
var userModel = ConvertObject<user>(obj);
}
/// <summary>
/// 用户
/// </summary>
public class user
{
/// <summary>
/// 编号
/// </summary>
public int id { set; get; }
/// <summary>
/// 姓名
/// </summary>
public string name { set; get; }
/// <summary>
/// 性别
/// </summary>
public int sex { set; get; }
/// <summary>
/// 年龄
/// </summary>
public int age { set; get; }
}
#endregion
版权声明:本文为hofmann原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。