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

简介: public string ToString(UserGiftCardModel model) { if (model == null) return ""; string sb = ""; Type type =model.
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
        
	}

已测试过。
相关文章
|
1月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
2月前
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
303 0
|
1月前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
116 65
|
10天前
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
|
12天前
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
|
10天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
1月前
|
监控 前端开发 安全
C#一分钟浅谈:文件上传与下载功能实现
【10月更文挑战第2天】在Web应用开发中,文件的上传与下载是常见需求。本文从基础入手,详细讲解如何在C#环境下实现文件上传与下载。首先介绍前端表单设计及后端接收保存方法,使用`&lt;input type=&quot;file&quot;&gt;`与`IFormFile`接口;接着探讨错误处理与优化策略,如安全性验证和路径管理;最后讲解文件下载的基本步骤,包括确定文件位置、设置响应头及发送文件流。此外,还提供了进阶技巧,如并发处理、大文件分块上传及进度监控,帮助开发者构建更健壮的应用系统。
108 15
|
1月前
|
开发框架 Cloud Native .NET
10 个 C# 关键字和功能
10 个 C# 关键字和功能
52 8
|
1月前
|
物联网 C#
【C#】简单的蓝牙通讯功能实现
【C#】简单的蓝牙通讯功能实现
38 0
|
1月前
|
C#
如何使用c# 实现断点续传功能
如何使用c# 实现断点续传功能
21 0