C#教程
主页 > 软件编程 > C#教程 >

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

2023-12-24 | 佚名 | 点击:

C#实体类转换方式

将一个实体类的数据赋值到另一个实体类中(亦或者实现深拷贝)。

以下提供两种方式

实现功能

开发环境

实现代码

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;

}

C#实体类转为JSON字符串

1

string jsonstr = JsonConvert.SerializeObject(model);

原文链接:
相关文章
最新更新