将一个实体类的数据赋值到另一个实体类中(亦或者实现深拷贝)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
//学生类 private class Student { public string name { get; set; } public int age { get; set; } public string className { get; set; }
} //教师类 private class Teacher { public string name { get; set; } public int age { get; set; } public string sex { get; set; } } //给学生类赋值 Student student = new Student { name = "张三", age = 20, className = "六" }; //泛型+反射方式 Teacher teacher = ConvertModel<Teacher, Student>(student); Console.WriteLine(teacher.name);//张三 Console.WriteLine(teacher.age);//20 Console.WriteLine(teacher.sex);
//JSON序列化方式 teacher = null; string json = JsonConvert.SerializeObject(student); teacher = JsonConvert.DeserializeObject<Teacher>(json); Console.WriteLine(teacher.name);//张三 Console.WriteLine(teacher.age); //20 Console.WriteLine(teacher.sex);
//泛型+反射 public static T ConvertModel<T, P>(P pModel) { T ret = System.Activator.CreateInstance<T>();
List<PropertyInfo> p_pis = pModel.GetType().GetProperties().ToList(); PropertyInfo[] t_pis = typeof(T).GetProperties();
foreach (PropertyInfo pi in t_pis) { //可写入数据 if (pi.CanWrite) { //忽略大小写 var name = p_pis.Find(s => s.Name.ToLower() == pi.Name.ToLower()); if (name != null && pi.PropertyType.Name == name.PropertyType.Name) { pi.SetValue(ret, name.GetValue(pModel, null), null); }
} }
return ret; } |
1 |
string jsonstr = JsonConvert.SerializeObject(model); |