我近来在学序列化,谈到应用场景之一:在进程下次启动时,读取上次保存的对象的信息问题:
我觉得要保存进程的信息,好像是要存入数据库吧,应该是与数据库有关系吧,怎么序列化也是这样的呢?如何整的?

解决方案 »

  1.   

    序列化是一个通用的概念,它是指内存中的对象与外部的交换信息的方式。如果你一定要搞“清楚”序列化,那么就先要每一次都搞清楚具体是指那一种序列化,而不是空洞地“序列化”这仨字。例如可以把内存对象以.net二进制方式序列化、json方式序列化,当然也可以自己写更多地代码来保存对象的所有属性(和字段),都是序列化概念。保存到数据库,只是序列化的方式中的一种。除此以外,把对象保存到文本文件、保存到“云”存储、保存到EPROM、保存到CD-ROM、发送电子邮件、发送给一个TCP服务、保存到windows本地内存映射文件、保存到MSMQ发送队列中、保存到应用程序配置文件中.......都是序列化。
      

  2.   

    其实(基本来说)存储不过是二进制。在.net中可能主要是在对象跟字符串之间的转换,而字符串再按照其字节保存。不过.net中也还是有把内存对象的转换叫做Serialize的例子,例如IPEndPoint自身有一个转换为SocketAddressde的Serialize方法。
      

  3.   

    比如:
    我在textbox1中写字,然后,关闭程序,再打开程序,打开后,textbox1仍然显示先前的字。
    请帮我写个简单的代码,用BinaryFormatter 类谢谢!!!
      

  4.   

    ”我觉得要保存进程的信息“
    -- 程序没法序列化,只有数据可以序列化。序列化可以序列化成二进制,或者文本,或者xml,只要能保存即可,和保存在哪里没有关系,可以保存成文件,也可以保存到数据库中。
      

  5.   

    例子参考这篇文章:有点复杂,序列化了很多东西Saving the state (serializing) a Windows Form
    http://www.codeproject.com/Articles/86503/Saving-the-state-serializing-a-Windows-Form简单点得可以参考这篇文章:
    C#序列化和反序列化
    http://www.builder.com.cn/2008/0904/1104611.shtml
      

  6.   

    你所谓的关闭程序,再打开程序时还显示原来输入的值,那要把数据存到硬盘上了,如果你的应用程序没退出只是关闭你的输入窗体,那数据时可以在内存里的。
    存到硬盘形式多种多样,用BinaryFormatter 类不过是用二进制存储罢了。
      

  7.   

    下面这个例子是把对象用二进制序列化的方式保存        SumOf sObj;
            private void button1_Click(object sender, EventArgs e)
            {
                // create a file stream to write the file
                FileStream fileStream = new FileStream("DoSum.bin", FileMode.Create);
                // use the CLR binary formatter
                BinaryFormatter binaryFormatter = new BinaryFormatter();
                // serialize to disk
                binaryFormatter.Serialize(fileStream, sObj);
                fileStream.Close();        }
            private SumOf BuildSumObj()
            {
                SumOf sObj = new SumOf();
                for (int i = 0; i < this.numericUpDown1.Value; i++)
                {
                    sObj.Members.Add(i);
                }
                sObj.Calculate();
                return sObj;
            }
      

  8.   

    代码是不是不完整,咋看不懂呢,主要是BuildSumObj方法