欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现实体类与字符串互相转换的方法

程序员文章站 2023-01-10 16:50:26
本文实例讲述了c#实现实体类与字符串互相转换的方法。分享给大家供大家参考。具体实现方法如下: using system; using system.collec...

本文实例讲述了c#实现实体类与字符串互相转换的方法。分享给大家供大家参考。具体实现方法如下:

using system;
using system.collections.generic;
using system.text;
namespace packdll.data.convertdata
{
 /// <summary>
 /// 实体类、字符串互相转换
 /// </summary>
 public class packreflectionentity<t>
 {
  /// <summary>
  /// 将实体类通过反射组装成字符串
  /// </summary>
  /// <param name="t">实体类</param>
  /// <returns>组装的字符串</returns>
  public static string getentitytostring(t t)
  {
   system.text.stringbuilder sb = new stringbuilder();
   type type = t.gettype();
   system.reflection.propertyinfo[] propertyinfos = type.getproperties();
   for (int i = 0; i < propertyinfos.length; i++)
   {
    sb.append(propertyinfos[i].name + ":" + propertyinfos[i].getvalue(t, null) + ",");
   }
   return sb.tostring().trimend(new char[] { ',' });
  }
  /// <summary>
  /// 将反射得到字符串转换为对象
  /// </summary>
  /// <param name="str">反射得到的字符串</param>
  /// <returns>实体类</returns>
  public static t getentitystringtoentity(string str)
  {
   string[] array = str.split(',');
   string[] temp = null;
   dictionary<string, string> dictionary = new dictionary<string, string>();
   foreach (string s in array)
   {
    temp = s.split(':');
    dictionary.add(temp[0], temp[1]);
   }
   system.reflection.assembly assembly = system.reflection.assembly.getassembly(typeof(t));
   t entry = (t)assembly.createinstance(typeof(t).fullname);
   system.text.stringbuilder sb = new stringbuilder();
   type type = entry.gettype();
   system.reflection.propertyinfo[] propertyinfos = type.getproperties();
   for (int i = 0; i < propertyinfos.length; i++)
   {
    foreach (string key in dictionary.keys)
    {
     if (propertyinfos[i].name == key.tostring())
     {
      propertyinfos[i].setvalue(entry, getobject(propertyinfos[i], dictionary[key]), null);
      break;
     }
    }
   }
   return entry;
  }
  /// <summary>
  /// 转换值的类型
  /// </summary>
  /// <param name="p"></param>
  /// <param name="value"></param>
  /// <returns></returns>
  static object getobject(system.reflection.propertyinfo p, string value)
  {
   switch (p.propertytype.name.tostring().tolower())
   {
    case "int16":
     return convert.toint16(value);
    case "int32":
     return convert.toint32(value);
    case "int64":
     return convert.toint64(value);
    case "string":
     return convert.tostring(value);
    case "datetime":
     return convert.todatetime(value);
    case "boolean":
     return convert.toboolean(value);
    case "char":
     return convert.tochar(value);
    case "double":
     return convert.todouble(value);
    default:
     return value;
   }
  }
 }
}

希望本文所述对大家的c#程序设计有所帮助。