C#实体类转换的两种方式小结
作者:Csharp 发布时间:2023-08-01 21:06:45
标签:C#,实体类,转换
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);
来源:https://blog.csdn.net/qq_27410185/article/details/122961344


猜你喜欢
- 测试Spring Boot定时任务冲突时,使用的线程数量引入依赖:Spring Boot 2.6.1 <dependency>
- Java进阶之FileUpload完成上传的实例 FileUpload是Apache commons下面
- 要获得打印机的状态,应该定义一个联合.enum PrinterStatus { 其他状态= 1, 未知, 空闲
- 抛砖今天使用monio做S3存储时,添加云服务器初始化时一直在构建客户端抛出异常。MinioClient.builder() //NoCla
- 本文实例为大家分享了Android实现滑动标尺选择值,效果图1.自定义属性attrs.xml<declare-styleable na
- java引用传递的三种类型我这里使用了mldn视频里的例子,只用于学习交流。第一种结果:调用前:50调用后:1000分析:理解:好理解第二种
- 项目上线之后,如果日志打印的很模糊或者业务逻辑比较复杂,有时候无法定位具体的错误原因,因此可以通过IDEA远程代理进行Debug。线上的代码
- SpringBoot的持久化层可以是Spring内置的轻量级JdbcTemplate、也可以是Hibernate或Mybatis等等,只需要
- java 交换两个数据的方法1:利用数组,即先把要交换的数字放在数组中 ,比如在一些数组排序中可能用到public static void
- 正文:相关术语翻译说明:Mark,标记;Sweep,清除;Compact,整理; 也有人翻译为压缩,译者认为GC时不存在压缩这回事。Copy
- 一. MediaPlayer 状态机 介绍Android MediaPlayer 状态即图例 :1. Idle (闲置) 状态 和 End
- ArrayList类List集合的实例化:List<String> l = new ArrayList<String>
- 实现功能:模拟简单登录功能,登录成功跳转新页面,登录失败在原登录界面提示登录失败信息开发环境:eclipseTomcat-8.0预备知识:H
- Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入
- 如下所示://StreamRead来读取一个文件 using (StreamReader sr = new StreamRea
- Android在布局文件中为View提供了onClick属性,使用方法如下:<TextView android:id=&
- 最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^一:首
- 虽然Android给我们提供了众多组件,但是使用起来都不是很方便,我们开发的APK都有自己的风格,如果使用了系统自带的组件,总是觉得和应用的
- 目录首先看效果图:使用方法:1、普通场景使用2、在DataBinding中使用首先看效果图:整词高亮:分词高亮:下面贴上我封的方法 /**
- Spring Cloud Gateway 默认的filter功能和执行顺序有效性Spring Cloud Gateway 2.0.0.REL