C#实体类转换的两种方式小结
更新时间:2023年01月25日 16:24:45 作者:Csharp 小记
这篇文章主要介绍了C#实体类转换的两种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud)
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
C#实体类转换方式
将一个实体类的数据赋值到另一个实体类中(亦或者实现深拷贝)。
以下提供两种方式
- 一种是序列化
- 一种是泛型+反射
实现功能
- 两个实体类数据转换赋值
开发环境
- 开发工具: Visual Studio 2013
- .NET Framework版本:4.5
实现代码
//学生类 ?? 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; }
C#实体类转为JSON字符串
string jsonstr = JsonConvert.SerializeObject(model);
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。
相关文章
VsCode使用EmmyLua插件调试Unity工程Lua代码的详细步骤
这篇文章主要介绍了VsCode使用EmmyLua插件调试Unity工程Lua代码,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-08-08C#中BitmapImage与BitmapSource接口的区别对比小结
BitmapImage和BitmapSource都可以用于表示和显示图像,本文就来介绍一下C#中BitmapImage与BitmapSource接口的区别对比,具有一定的参考价值,感兴趣的可以了解一下2024-03-03
最新评论