对象序列化反序列化

       //方法1   如在webservice中  序列化
            BinaryFormatter bf = new BinaryFormatter();
            MemoryStream ms = new MemoryStream();
            bf.Serialize(ms, jcar);
            byte[] buffer = ms.ToArray();
            return buffer ;


           在接收端得到buffer反序列化

            BinaryFormatter bf2 = new BinaryFormatter();
            MemoryStream ms2 = new MemoryStream(buffer);
            JamesBoudCar j = (JamesBoudCar)bf2.Deserialize(ms2);
            Response.Write("汽车可以飞吗?:{0}" + j.canFly);
            Response.Write("汽车可以在水里开吗?:{0}" + j.canSubmerge);




using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap;
using System.Xml.Serialization;
namespace Object_DxXuLieHua_17
{
    /// <summary>
    /// 对象序列化
    ///
    /// </summary>
    [Serializable]
    public class Redio
    {
        public bool hasTweeters;
        public bool hasSubWoofers;
        public double[] stationPresets;
        [NonSerialized]
        public string radioID = "XF-552RR6";
    }
    [Serializable]
    public class Car
    {
        public Redio theRedio = new Redio();
        public bool isHatchBack;
    }
    [Serializable,XmlRoot(Namespace="http://www.intertechtraining.com")]
    public class JamesBoudCar : Car
    {
        [XmlAttribute]
        public bool canFly;
        [XmlAttribute]
        public bool canSubmerge;
        public JamesBoudCar(bool sky, bool sea)
        {
            canFly = sky;
            canSubmerge = sea;
        }
        public JamesBoudCar() { }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("对象序列化");
            //要序列化的对象
            JamesBoudCar jcar = new JamesBoudCar();
            jcar.canFly = true;
            jcar.canSubmerge = false;
            jcar.theRedio.stationPresets = new double[] {89.3,105.1,97.1 };
            jcar.isHatchBack = true;


            #region 使用BinaryFormatter序列化反序列化对象
            //将对象以二进制保存到一个文件
            BinaryFormatter bin = new BinaryFormatter();
            Stream fstream = new FileStream("CarData.dat",FileMode.Create,FileAccess.Write,FileShare.None);
            bin.Serialize(fstream,jcar);
            fstream.Close();
            Console.ReadLine();
            //反序列化
            fstream = File.OpenRead("CarData.dat");
            JamesBoudCar j = (JamesBoudCar)bin.Deserialize(fstream);
            Console.WriteLine("汽车可以飞吗?:{0}",j.canFly);
            Console.WriteLine("汽车可以在水里开吗?:{0}",j.canSubmerge);
            fstream.Close();
            Console.ReadLine();
            #endregion

            #region 使用SoapFprmatter序列化反序列化对象
            //对象以SOAP格式保存
            SoapFormatter soap = new SoapFormatter();
            fstream = new FileStream("CarData.soap",FileMode.Create,FileAccess.Write,FileShare.None);
            soap.Serialize(fstream,jcar);
            fstream.Close();
            Console.ReadLine();
            //反序列化
            fstream = File.OpenRead("CarData.soap");
            JamesBoudCar jc = (JamesBoudCar)soap.Deserialize(fstream);
            Console.WriteLine("查看数字1:{0}",jc.theRedio.stationPresets[0]);
            Console.WriteLine("查看数字2:{0}", jc.theRedio.stationPresets[1]);
            fstream.Close();
            Console.ReadLine();
            #endregion

            #region 使用XMLSerializer序列化反序列化对象
            //对象以XML格式存储
            XmlSerializer xml = new XmlSerializer(typeof(JamesBoudCar), new Type[] { typeof(Redio),typeof(Car)});
            fstream =new FileStream("CarData.xml",FileMode.Create,FileAccess.Write,FileShare.None);
            xml.Serialize(fstream,jcar);
            fstream.Close();
            Console.ReadLine();
            //反序列化
            fstream = File.OpenRead("CarData.xml");
            JamesBoudCar jj = (JamesBoudCar)xml.Deserialize(fstream);
            Console.WriteLine("第三个数字是:{0}",jj.theRedio.stationPresets[2]);
            Console.WriteLine("车的号码是:{0}",jj.theRedio.radioID);
            fstream.Close();
            Console.ReadLine();
            #endregion

            #region 使用XMLSerializer序列化反序列化对象集合
            //对象以XML格式存储
            List<JamesBoudCar> list = new List<JamesBoudCar>();
            list.Add(new JamesBoudCar(true,false));
           //list.Add(new JamesBoudCar(true, true));
           //list.Add(new JamesBoudCar(false, false));
           // list[0].canFly = false;
            list[0].canSubmerge = false;
            list[0].isHatchBack = true;
            list[0].theRedio.stationPresets = new double[] {12.1,22.6,456.3};
            fstream = new FileStream("CarConnection.xml",FileMode.Create,FileAccess.Write,FileShare.None);
            xml = new XmlSerializer(typeof(List<JamesBoudCar>), new Type[] { typeof(JamesBoudCar),typeof(Redio),typeof(Car)});
            xml.Serialize(fstream,list);
            fstream.Close();
            Console.ReadLine();
            //反序列化
            fstream = File.OpenRead("CarConnection.xml");
            List<JamesBoudCar> lis =xml.Deserialize(fstream) as List<JamesBoudCar>;
            Console.WriteLine("查看数字一:{0}",lis[0].theRedio.stationPresets[0]);
            Console.WriteLine("汽车能飞吗?:{0}",lis[0].canFly);
            #endregion

        }
    }
}

 

原文地址:https://www.cnblogs.com/aaa6818162/p/1541086.html