PropertyInfo的使用

1.案例1,如果两个类中有大部分的字段相同,需要将其中一个类的字段赋值给另外一个类:

定义Person类:

public class Person {
       public Person(int id,string name,string address)
       {
           this.Id = id;
           this.Name = name;
           this.Address = address;
       }
       public int Id { get; set; }
       public string Name { get; set; }
       public string Address { get; set; }
   }

定义User类

public class User {
       public int Id { get; set; }
       public string Name { get; set; }
       public string Group { get; set; }
   }
转换方法:

public static User ConvertObject(User user,Person person)
       {
           PropertyInfo[] userPro = user.GetType().GetProperties();
           PropertyInfo[] personPro = person.GetType().GetProperties();
           if (userPro.Length>0&&personPro.Length>0)
           {
               for (int i = 0; i < userPro.Length; i++)
               {
                   for (int j = 0; j < personPro.Length; j++)
                   {<br>              //判断User的属性是不是的Person中
                       if (userPro[i].Name == personPro[j].Name && userPro[i].PropertyType == personPro[j].PropertyType)
                       {
                           Object value=personPro[j].GetValue(person, null);
                          //将Person中属性的值赋值给User<br>                  userPro[i].SetValue(user,value , null);
                       }
                   }
               }
           }
           return user;
       }
方法的调用:

static void Main(string[] args)
      {
          Person person = new Person(1,"FlyElephant","北京");
          User user = new User();
          user.Id = 20;
          user = ConvertObject(user, person);
          Console.WriteLine("Id:" + user.Id + "Name:" + user.Name + "角色:" + user.Group);
          System.Console.Read();
      }
2.之前在做Winform的时候就经常回使用到SqlHelper,现在也有很多公司是这么使用的,当时很多东西感觉就是重复性的操作,一度以为编程只是复制粘贴,下面这段代码大家应该很常见:

List<Person> list = new List<Person>();
SqlDataReader sdr = new SqlDataReader();
while (sdr.Read())
{
    Person person = new Person();
    person.Name = sdr.GetString(0);
    //....下面类似
    list.Add(person);
}
换一种方式来实现上面的代码:
public static List<T> ConvertData<T>(SqlDataReader sdr)
     {
         List<T> list = new List<T>();
         Type type = typeof(T);
         PropertyInfo[] properties = type.GetProperties();
         while (sdr.Read())
         {
             T model = Activator.CreateInstance<T>();
             for (int i = 0; i < properties.Length; i++)
             {
                 for (int j = 0; j < sdr.FieldCount; j++)
                 {
                     //判断属性的名称和字段的名称是否相同
                     if (properties[i].Name == sdr.GetName(j))
                     {
                         Object value =sdr[j];
                         //将字段的值赋值给User中的属性
                         properties[i].SetValue(model, value, null);
                     }
                 }
             }
             list.Add(model);
         }
         return list;
     }
调用:
List<User> list = new List<User>();
SqlDataReader sdr = cmd.ExecuteReader();
list = ConvertData<User>(sdr);

3.案例三,ajax页面传递值可以使用get方式,或者post方式的传递JSON格式数据转换

简单的转换一个get传递的字符串Name=xx&Age=xx,后台直接用一个字典去模拟了:

Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("Id",100);
dic.Add("Name", "keso");
dic.Add("Group", "程序员");
转换字典方法:

public static T ConvertDic<T>(Dictionary<string, object> dic)
      {
          T model = Activator.CreateInstance<T>();
          PropertyInfo[] modelPro = model.GetType().GetProperties();
          if (modelPro.Length > 0 && dic.Count() > 0)
          {
              for (int i = 0; i < modelPro.Length; i++)
              {
                  if (dic.ContainsKey(modelPro[i].Name))
                  {
                      modelPro[i].SetValue(model, dic[modelPro[i].Name], null);
                  }
              }
          }
          return model;
      }
调用:

User user = ConvertDic<User>(dic);








评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值