[netMarketing类库] Serialize类:类的序列化与反序列化

命名空间:sharClass.Serialize

功能:对象的序列化与反序列化。


功能详细说明:

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。


.NET Framework 提供两种序列化技术:

二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。

XML 序列化仅序列化公共属性和字段,且不保持类型保真度。当您要提供或使用数据而不限制使用该数据的应用程序时,这一点是很有用的。由于 XML 是一个开放式标准,因此,对于通过 Web 共享数据而言,这是一个很好的选择。

Serialize类的实现的就是二进制序列化,因此本类的功能中,序列化通俗的说法就就是把类对象变成二进制文件存储在磁盘上,反序列化就是把磁盘文件读出来再转换成类对象。


常用函数列表

public static void FileSerialize(string FilePath, object obj)
public static object FileDeSerialize(string FilePath)

这两个函数都是静态函数,可以按[类型.函数名]方式直接调用。

FileSerialize    函数将对象序列化,要序列化的对象需要事先加标签[Serializable]
FileDeSerialize    函数将文件反序列化,要序列化的对象需要事先加标签[Serializable]

参考例子:

namespace zw7000test
{
    public partial class Form1 : Form
    {
	//定义配置文件类的实例对象
        private winData configdata = new winData();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
	    //程序Form载入时,反序列化配置文件对象,然后给窗体上的控件赋值
            if (workInfoFromDisk())
            {
                tbLaserChannel.Text = configdata.laserChannel.ToString();
                tbSum.Text = configdata.dataSum.ToString();
                tbLaserIP.Text = configdata.laserIP;
                tbLaserPort.Text = configdata.laserPort.ToString();
            }
        }

        public bool workInfoFromDisk()
        {
	    //反序列化
            try
            {
                var res = Serialize.FileDeSerialize(AppDomain.CurrentDomain.BaseDirectory + "autoCaliSetting");
                if (null != res)
                {
                    configdata = res as winData;
                    return true;
                }
                return false;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public bool workInfoToDisk()
        {
	    //序列化
            try
            {
                Serialize.FileSerialize(AppDomain.CurrentDomain.BaseDirectory + "autoCaliSetting", configdata);
                return true;
            }
            catch (Exception ex)
            {
                throw new ArgumentException(ex.Message);
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //程序Form窗体关闭时把窗体控件上的值更新到配置文件类configdata中去,然后调用workInfoToDisk序列化到磁盘上去。
            try
            {
                configdata.laserChannel =int.Parse( tbLaserChannel.Text);
                configdata.dataSum = int.Parse(tbSum.Text);
                configdata.laserIP = tbLaserIP.Text;
                configdata.laserPort = int.Parse(tbLaserPort.Text);
                workInfoToDisk();
                Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }

    [Serializable]
    public class winData
    {
	//这个类将被序列化与反序列化,它的作用是记录Form中的用户录入的参数。
        //这个类必须打上标志[Serializable],表示这个类用于序列化。如果没有这个标记,程序会报错。
        public int laserChannel { get; set; }
        public int dataSum { get; set; }
        public string laserIP { get; set; }
        public int laserPort { get; set; }
    }

}


以上代码中的配置文件类以序列化与反序列化的方式记录着下图界面中用户输入的数据。
当用户关闭窗体后,配置数据序列化成二进制文件保存到磁盘。
当用户打开程序后,配置数据反序列化,从磁盘载入恢复配置文件类的值,同时写到界面控件上。

image.png


从以上例子可以看到,序列化与反序列化最基础的应用是可以用来保存配置文件(而且用户查看不到,因为二进制格式,打开后会乱码)。
由于勇哥从事于工业自动化行业,虽然这个功能用于网络数据传输是最常见的,但是跟我们的行业不相关,也就不再介绍了。


--------------------- 

作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

返回类库功能说明目录


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864