c#利用反射,实现将model类变成字符串、再还原成mode对象的功能

public string ToString(UserGiftCardModel model)
        {
            if (model == null) return "";
            string sb = "";
            Type type =model.GetType() ;//assembly.GetType("Reflect_test.PurchaseOrderHeadManageModel", true, true); //命名空间名称 + 类名  

            //创建类的实例
            //object obj = Activator.CreateInstance(type, true);

            //获取公共属性
            PropertyInfo[] Propertys = type.GetProperties();
            for (int i = 0; i < Propertys.Length; i++)
            {
                // Propertys[i].SetValue(Propertys[i], i, null); //设置值
                PropertyInfo pi = type.GetProperty(Propertys[i].Name);
                object val=pi.GetValue(model, null);
                string value = val == null ? "" : val.ToString(); ;
                sb += Propertys[i].Name +"|"+ value + "_"; //获取值
               // Console.WriteLine("属性名:{0},类型:{1}", Propertys[i].Name, Propertys[i].PropertyType);
            }

            if(sb.Length>0) sb=sb.Substring(0,sb.Length-1);
            return sb;
        }
        public UserGiftCardModel DesToString(string modelstr)
        {
            if (modelstr == "") return null;
            UserGiftCardModel model = new UserGiftCardModel();
            Type type = model.GetType();//assembly.GetType("Reflect_test.PurchaseOrderHeadManageModel", true, true); //命名空间名称 + 类名  

            //创建类的实例
            //object obj = Activator.CreateInstance(type, true);

            Dictionary<string, object> dict = new Dictionary<string, object>();

            //获取公共属性
            PropertyInfo[] Propertys = type.GetProperties();
            object[] objs = modelstr.Split('_');
            foreach (object obj in objs)
            {
                object[] obj1 = obj.ToString().Split('|');
                dict[obj1[0].ToString()] = obj1[1];
            }
            for (int i = 0; i < Propertys.Length; i++)
            {
               string p_type= Propertys[i].PropertyType.ToString().ToLower();
               if (dict[Propertys[i].Name].ToString() == "") dict[Propertys[i].Name] = null;
                // Propertys[i].SetValue(Propertys[i], i, null); //设置值
               PropertyInfo pi = type.GetProperty(Propertys[i].Name);
                object value=null;
                if (p_type.Contains("decimal"))
                {
                    if (dict[Propertys[i].Name] != null)
                        value = Convert.ToDecimal(dict[Propertys[i].Name]);
                }
                else if (p_type.Contains("int32"))
                {
                    if (dict[Propertys[i].Name] != null)
                        value = Convert.ToInt32(dict[Propertys[i].Name]);
                }
                else if (p_type.Contains("int64"))
                {
                    if (dict[Propertys[i].Name] != null)
                        value = Convert.ToInt64(dict[Propertys[i].Name]);
                }
                else if (p_type.Contains("datetime") || p_type.Contains("date"))
                {
                    if (dict[Propertys[i].Name] != null)
                        value = Convert.ToDateTime(dict[Propertys[i].Name]);
                }
                else
                {
                    value = dict[Propertys[i].Name];
                }
                pi.SetValue(model, value, null);

                //Console.WriteLine("属性名:{0},类型:{1}", Propertys[i].Name, Propertys[i].PropertyType);
            }

            return model;
        }
	public class UserGiftCardModel
	{
		#region 构造函数
		/// <summary>
		/// 无参构造函数
		/// </summary>
		public UserGiftCardModel(){}
		/// <summary>
        /// 有参构造函数
        /// </summary>
		/// <param name=" _cardnumber">礼品卡号</param>
		/// <param name=" _password">卡密码</param>
		/// <param name=" _festivalname">节日名称</param>
		/// <param name=" _facevalue">面值</param>
		/// <param name=" _balance">余额</param>
		/// <param name=" _couponamount">奖励金额</param>
		/// <param name=" _picture">图片</param>
		/// <param name=" _title">标题 </param>
		/// <param name=" _buytime">购买时间</param>
		/// <param name=" _buyid">购买人ID</param>
		/// <param name=" _recieveid">接收人ID</param>
		/// <param name=" _receiveemail">接收者邮箱</param>
		/// <param name=" _leavewords">留言</param>
		public UserGiftCardModel(string _cardnumber,string _password,string _festivalname,decimal _facevalue,decimal _balance,decimal _couponamount,string _picture,string _title,DateTime _buytime,int _buyid,int _recieveid,string _receiveemail,string _leavewords)
        {
	        this._cardnumber = _cardnumber;
	        this._password = _password;
	        this._festivalname = _festivalname;
	        this._facevalue = _facevalue;
	        this._balance = _balance;
	        this._couponamount = _couponamount;
	        this._picture = _picture;
	        this._title = _title;
	        this._buytime = _buytime;
	        this._buyid = _buyid;
	        this._recieveid = _recieveid;
	        this._receiveemail = _receiveemail;
	        this._leavewords = _leavewords;
        }
        #endregion

		#region 数据库字段对应的属性
      	private string _cardnumber = "";
		/// <summary>
		/// 礼品卡号
        /// </summary>
        public string CardNumber
        {
            get{ return _cardnumber; }
            set{ _cardnumber = value; }
        }
        private string _password = "";
		/// <summary>
		/// 卡密码
        /// </summary>
        public string Password
        {
            get{ return _password; }
            set{ _password = value; }
        }
        private string _festivalname = "";
		/// <summary>
		/// 节日名称
        /// </summary>
        public string FestivalName
        {
            get{ return _festivalname; }
            set{ _festivalname = value; }
        }
        private decimal? _facevalue = null;
		/// <summary>
		/// 面值
        /// </summary>
        public decimal? FaceValue
        {
            get{ return _facevalue; }
            set{ _facevalue = value; }
        }
        private decimal? _balance = null;
		/// <summary>
		/// 余额
        /// </summary>
        public decimal? Balance
        {
            get{ return _balance; }
            set{ _balance = value; }
        }
        private decimal? _couponamount = null;
		/// <summary>
		/// 奖励金额
        /// </summary>
        public decimal? CouponAmount
        {
            get{ return _couponamount; }
            set{ _couponamount = value; }
        }
        private string _picture = "";
		/// <summary>
		/// 图片
        /// </summary>
        public string Picture
        {
            get{ return _picture; }
            set{ _picture = value; }
        }
        private string _title = "";
		/// <summary>
		/// 标题
        /// </summary>
        public string Title
        {
            get{ return _title; }
            set{ _title = value; }
        }
        private DateTime? _buytime = null;
		/// <summary>
		/// 购买时间
        /// </summary>
        public DateTime? BuyTime
        {
            get{ return _buytime; }
            set{ _buytime = value; }
        }
        private int? _buyid = null;
		/// <summary>
		/// 购买人ID
        /// </summary>
        public int? BuyID
        {
            get{ return _buyid; }
            set{ _buyid = value; }
        }
        private int? _recieveid = null;
		/// <summary>
		/// 接收人ID
        /// </summary>
        public int? RecieveID
        {
            get{ return _recieveid; }
            set{ _recieveid = value; }
        }
        private string _receiveemail = "";
		/// <summary>
		/// 接收者邮箱
        /// </summary>
        public string ReceiveEmail
        {
            get{ return _receiveemail; }
            set{ _receiveemail = value; }
        }
        private string _leavewords = "";
		/// <summary>
		/// 留言
        /// </summary>
        public string LeaveWords
        {
            get{ return _leavewords; }
            set{ _leavewords = value; }
        }
        #endregion

        #region 根据需要自定义字段
        //private string _test = "";
        ///// <summary>
        ///// 其他字段
        ///// </summary>
        //public string Test
        //{
        //    get { return _test; }
        //    set { _test = value; }
        //}
        #endregion

	}

已测试过。

时间: 2024-09-14 20:00:07

c#利用反射,实现将model类变成字符串、再还原成mode对象的功能的相关文章

反射 注解-Java利用反射执行框架注入类的非静态方法

问题描述 Java利用反射执行框架注入类的非静态方法 之前对代码做优化,利用了反射去执行指定类的指定方法: public static JsonResultVO callMethod(Class<?> className String methodName Class<?>[] paramClass Object[] param) { JsonResultVO resultVO = new JsonResultVO(); try { Method m = className.get

silverlight:利用telerik中的zip类对字符串进行压缩、解压

直接给码: using System; using System.IO; using Telerik.Windows.Zip; namespace JIMMY { public static class ZipHelper { /// <summary> /// 利用telerik的zip库压缩字符串 /// </summary> /// <param name="str"></param> /// <returns><

将java类的泛型集合转换成json对象

一般用extjs开发传输都是用json比较多,这个将来大家也许会用到... ConvertJsonUtils.java package com.sunweb.util.jsonfactory; import java.util.List; import com.sunweb.util.jsonfactory.jsontools.JSONArray;import com.sunweb.util.jsonfactory.jsontools.JSONException;import com.sunwe

asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法_实用技巧

本文实例讲述了asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法.分享给大家供大家参考,具体如下: 这是初级的,很简单,牛人可以不看了.不过还算实用. 在项目中经常需要处理表单,给model赋值,很烦人的一些重复代码.如下边的代码: News news = new News(); news.Id = int.Parse(Request.Form["Id"]); news.Category = int.Parse(Request.Form["Catego

利用反射动态调用类成员

动态 (C#)利用反射动态调用类成员 使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args ); 参数 name String,它包含要调用的构造函数.方法.属性或字段成员的名称. - 或 - 空字符串 (""

(C#)利用反射动态调用类成员

动态 (C#)利用反射动态调用类成员 使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember( string name, BindingFlags invokeAttr, Binder binder, object target, object[] args ); 参数 name String,它包含要调用的构造函数.方法.属性或字段成员的名称. - 或 - 空字符串 (""

利用反射自己写的一个ModelHelper类

开发中 很多人都会使用BLL Model这种开发,我也是,虽然现在有很多的自动生成工具,能在几秒内生成cs的模板,但我个人还不是很喜欢,我还是喜欢自己一个一个去写,这样更能了解自己的代码. 不过手动编写的时候,最讨厌的就是GetModel这类方法了,把datarow的数据转换成一个Model,实在写的我头疼,因为很多代码基本上都是一样的,一直想用反射来写这样一个方法,以后只要调用一个方法就能完成Model的赋值,那样就方便了.今天又遇到此类代码了,一时火大,自己写了个方法,采用的反射的原理(从B

C#利用反射简化给类字段赋值

 这个例子主要的思路是建立一个类和数据库查询语句的字段结构是一致的 然后利用反射,直接用数据字段名称进行拼凑,给类对象的字段进行赋值 1.类的定义 namespace CCB_Donet.ClassFolder { public class FieldRuleInfo { public string gStrFNo; public string gStrFName; public string gStrFLock; public string gStrFCaption; public strin

Java反射高级应用--利用反射调用类的私有方法修改私有方法值,以及替换Java的类成员数据

  package me.test; import java.lang.reflect.*;  //导入反射需要的包 public class ReflectTest {  public static void main(String[] args)  throws  Exception  {       /*  下面通过反射完成对一个对象中成员的替换    *   并且执行执行私有方法     *   完成对 Poiont类的对象中所有的 String的对象的d换成x    *   并且类中无