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

  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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值