三种序列化的方法以及反序列化

    技术2024-10-29  62

      class xuliehua    {                       static void Main(string[] args)              {                       JamesBondCar car = new JamesBondCar();                 car.canFly = true;                   SaveAsBinaryFormat(car, "carBinaryData.dat");              LoadFromBinaryFormat("carBinaryData.dat");                    SaveAsSoapFormat(car,"carSoapData.dat");                      LoadFromSoapFormat("carSoapData.dat");                     SaveAsXmlFormat(car,"carXmlData.dat");                     LoadFromXmlFormat("carXmlData.dat"); 

                    int count;            //从程序外部获取byte数组            byte[] byteArray = getByteData();            char[] charArray;            UnicodeEncoding uniEncoding = new UnicodeEncoding();            //创建MemoryStream内存流类的实例            MemoryStream memStream = new MemoryStream(byteArray);            count = 0;            //显示内存流类实例的属性            Console.WriteLine(            "容量:{0}/t数量:{1}/t当前位置:{2}",            memStream.Capacity.ToString(),            memStream.Length.ToString(),            memStream.Position.ToString());            memStream.Seek(0, SeekOrigin.Begin);//将当前位置指定为流开始处            byteArray = new byte[memStream.Length];            count = memStream.Read(byteArray, 0, 20);//从流中读取前20个字节            while (count < memStream.Length)//逐个读取剩下的字节            {                byteArray[count++] = Convert.ToByte(memStream.ReadByte());            }            //将字节数组转换为字符数组并显示出来            charArray = new char[uniEncoding.GetCharCount(byteArray, 0, count)];            uniEncoding.GetChars(byteArray, 0, count, charArray, 0);            Console.WriteLine(charArray);            Console.ReadLine();

                           }        private static byte[] getByteData()//获取外部字节数组的方法        {            UnicodeEncoding uniEncoding = new UnicodeEncoding();            byte[] result = uniEncoding.GetBytes("memStream示例测试字符串");            return result;        }        //binary序列化         static void SaveAsBinaryFormat(object objGraph, string fileName)             {                     BinaryFormatter bf = new BinaryFormatter();                 using(                Stream fs=new FileStream (fileName,FileMode.Create,FileAccess.Write,FileShare.None))                              {                     bf.Serialize(fs, objGraph);                    }                       Console.WriteLine("=>Saved car in binary format");            }        //binary反序列化              static void LoadFromBinaryFormat(string fileName)            {                       BinaryFormatter bf = new BinaryFormatter();                  using(Stream fs=File.OpenRead(fileName))             {                                JamesBondCar car = (JamesBondCar)bf.Deserialize(fs);                         Console.WriteLine("Can Fly ? : {0}", car.canFly);                     }               }        //Soap 序列化               static void SaveAsSoapFormat(object objGraph, string fileName)              {                       SoapFormatter sf = new SoapFormatter();                      using (Stream fs = new FileStream  (fileName, FileMode.Create, FileAccess.Write, FileShare.None))                                         {                              sf.Serialize(fs, objGraph);                    }                       Console.WriteLine("=>Saved car in Soap format");                }        //Soap反序列化                static void LoadFromSoapFormat(string fileName)             {                      SoapFormatter sf = new SoapFormatter();                    using (Stream fs = File.OpenRead(fileName))                  {                              JamesBondCar car=(JamesBondCar) sf.Deserialize(fs);                       Console.WriteLine("Can Fly ? : {0}", car.canFly);                  }                }               //Xml序列化              static void SaveAsXmlFormat(object objGraph, string fileName)                {                       XmlSerializer xs = new XmlSerializer(typeof(JamesBondCar), new Type[] { typeof(Radio),typeof(Car)});                   using (Stream fs = new FileStream (fileName, FileMode.Create, FileAccess.Write, FileShare.None))                  {                                xs.Serialize(fs, objGraph);                      }                       Console.WriteLine("=>Saved car in XML format");             }               //Xml反序列化             static void LoadFromXmlFormat(string fileName)                {                      XmlSerializer xs = new XmlSerializer(typeof(JamesBondCar), new Type[] { typeof(Radio), typeof(Car) });                using (Stream fs = File.OpenRead(fileName))                      {                               JamesBondCar car = (JamesBondCar)xs.Deserialize(fs);                        Console.WriteLine("Can Fly ? : {0}", car.canFly);                    }               }        }        [Serializable]         public class Radio       {               public bool hasTweeters;              public bool hasSubWoofers;               public double[] stationPresets;           public string radioID = "XF-552RR6";       }       [Serializable]       public class Car       {                  [NonSerialized]              public Radio radio = new Radio();             public bool isHatchBack;        }        [Serializable]        public class JamesBondCar : Car       {                public bool canFly;              public bool canSubmerge;        }

    特别要注意,其中,FileStream  和,MemoryStream

       ^_^。

    最新回复(0)