序列化和反序列化

一、概述

何为序列化和反序列化?

我们再传递数据的和保存数据时,我们可以用一个变量记录,但是如果是一个对象改怎么办呢,这是就得用序列化和反序列化。

在计算机中,数据的存放都是二进制。我们传递数据也是传递二进制,根据这个不变性,我们把需要传递的变量序列化成一个二进制的数据保存并传递,再通过反序列化,就能够得到原来的对象。

下面是一个实现序列化和反序列化的例子,我们通过特殊属性定义了一个  [Serializable]class myobject,在myobject中又有一个  [NoSerializable]的变量age

通过变量传递后,我们发现,age的值是默认值0,而不是23.

这说明,只有实现了序列化的变量/值,才能被传递,其他的不能。

    class Program
    {
        static void Main(string[] args)
        {
            Byte[] myArray = Seriliaze(new myObject());
            Console.WriteLine(DeSeriliaze(myArray));
            Console.ReadKey();
        }

        /// <summary>
        /// 序列化程序
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
         static Byte[] Seriliaze(myObject obj)
        {
            ///IFormatter 提供将序列化对象格式化的功能
            ///BinaryFormatter 用二进制方式序列化或反序列化一个对象
            IFormatter formatter = new BinaryFormatter();
            using (MemoryStream stream = new MemoryStream())
            {
                formatter.Serialize(stream, obj); //将对象序列化成一个内存流
                return stream.ToArray();          //将内存流放入一个字节数组,并返回
            }

        }
         /// <summary>
         /// 序列化程序
         /// </summary>
         /// <param name="obj"></param>
         /// <returns></returns>
         static myObject DeSeriliaze(Byte[] byteArray)
         {
             ///IFormatter 提供将序列化对象格式化的功能
             ///BinaryFormatter 用二进制方式序列化或反序列化一个对象
             IFormatter formatter = new BinaryFormatter();
             //将字节数组放到内存流中
             using (MemoryStream stream =new MemoryStream(byteArray))
             {
                 return (myObject)formatter.Deserialize(stream); //将内存流反序列化成一个对象返回
                     
             }
         }
        }
        /// <summary>
        /// 一个用来测试序列化的类
        /// </summary>
        [Serializable]
        class myObject
        { 
           String name = "nimei";
          [NonSerialized]
            int age = 23;

            public myObject()
            { 
        
            }

            public override string ToString()
            {
                 return String.Format("my name is {0};age is {1}",name,age);
            }
    
        }

  二、详细

     实现序列化的方法有哪些呢?

在.net中是先序列化的方法有:BinaryFormatter,SoapFormatter,XmlSerilizer

http://www.cnblogs.com/ejiyuan/archive/2009/01/21/1379256.html 这里讲的比较清楚,大家可以参考

原文地址:https://www.cnblogs.com/fjsnail/p/3305950.html