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);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。

相关文章

  • Unity接入百度AI实现果蔬识别

    Unity接入百度AI实现果蔬识别

    本文将介绍如何利用Unity接入百度AI从而实现果蔬识别,可以做到识别近千种水果和蔬菜的名称,可自定义返回识别结果数。感兴趣的小伙伴可以了解一下
    2022-02-02
  • C#实体类转换的两种方式小结

    C#实体类转换的两种方式小结

    这篇文章主要介绍了C#实体类转换的两种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • VsCode使用EmmyLua插件调试Unity工程Lua代码的详细步骤

    VsCode使用EmmyLua插件调试Unity工程Lua代码的详细步骤

    这篇文章主要介绍了VsCode使用EmmyLua插件调试Unity工程Lua代码,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • C#的File类实现文件操作实例详解

    C#的File类实现文件操作实例详解

    这篇文章主要介绍了C#的File类实现文件操作的方法,非常实用,需要的朋友可以参考下
    2014-07-07
  • C#使用对象序列化类库MessasgePack

    C#使用对象序列化类库MessasgePack

    这篇文章介绍了C#使用对象序列化类库MessasgePack的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C# 使用modbus 读取PLC 寄存器地址的方法

    C# 使用modbus 读取PLC 寄存器地址的方法

    今天通过本文给大家介绍C# 使用modbus 读取PLC 寄存器地址的方法,使用的组件Nmodbus,文中通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-10-10
  • 利用C#实现绘制出地球旋转效果

    利用C#实现绘制出地球旋转效果

    这篇文章主要为大家详细介绍了如何利用C#语言实现绘制出地球旋转的效果,文中的示例代码讲解详细,具有一定的参考价值,需要的可以了解一下
    2023-02-02
  • C# 调用WebService的方法

    C# 调用WebService的方法

    这篇文章主要介绍了C# 调用WebService的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • c#求点到直线的投影点坐标

    c#求点到直线的投影点坐标

    这篇文章主要介绍了c#求直线外一点到该直线的投影点,大家参考使用吧
    2013-12-12
  • C#中BitmapImage与BitmapSource接口的区别对比小结

    C#中BitmapImage与BitmapSource接口的区别对比小结

    BitmapImage和BitmapSource都可以用于表示和显示图像,本文就来介绍一下C#中BitmapImage与BitmapSource接口的区别对比,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03

最新评论

?


http://www.vxiaotou.com