成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#對象序列化應用淺析

開發
C#對象序列化應用的理解是什么?C#對象序列化應用的必要性和優點是什么?C#對象序列化應用的具體實例是什么呢?那么本文就向你介紹這方面的內容。

C#對象序列化的應用:在寫程序的時候,想要保存一些對象。最初設計時的想法是才用xml來保存。實際編程過程中發現這還是挺繁瑣的,那么多的字段和屬性,還有各種組合的類。C#對象序列化應用的必要性:如果用xml來保存,嵌套多,嫌麻煩!最重要的是,我覺得使用XML來保存東西的話,那程序就被寫死了,在保存/讀取的時候,必須依據指定的元素的名或者屬性名什么的來操作。如果使用序列化,那所有的一切交給Serialzer來做就搞定了。我們只需要寫很少的代碼就可以完成這個工作。然后考慮使用xml序列化來保存,但是這XmlSerialzer只能保存公共字段,感覺有些不夠,就用二進制序列化了。對于某個需要進行序列化工作的類,在不繼承自接口ISerializable的情況下,通過增加[Serializable]屬性可以允許該類可以被序列化。

C#對象序列化應用實例:

  1. [Serializable]  
  2. public class Car  
  3. {  
  4.     private ArrayList _wheels=new ArrayList();  
  5.     private ArrayList _Lights=new ArrayList();  
  6.     public ArrayList Wheels  
  7.     {  
  8.     get{  
  9.     return _wheels;  
  10.     }  
  11.     set{  
  12.     _wheels=value;  
  13.     }  
  14.     }  
  15.     public ArrayList Lights  
  16.     {  
  17.     get{  
  18.     return _Lights;  
  19.     }  
  20.     set{  
  21.     _Lights=value;  
  22.     }  
  23.     }  
  24.     public Car  
  25.     {  
  26.     Wheel LeftWheel=new Wheel();  
  27.     Wheel RightWheel=new Wheel();  
  28.     _wheels.Add(LeftWheel);  
  29.     _wheels.Add(RightWheel);  
  30.     
  31.     Light LeftLight=new Light();  
  32.     Light RightLight=new Light();  
  33.     _Lights.Add(LeftLight);  
  34.     _Lights.Add(RightLight);  
  35.     }  
  36. }  
  37. [Serialzable]  
  38. public class Wheel  
  39. {  
  40. public float Radius=0.5f;  
  41. }  
  42. [Serailzable]  
  43. public class Light  
  44. {  
  45. public float Price=200f;  

C#對象序列化操作:

  1. Car myCar=new Car();  
  2. FileStream fs=null;  
  3. try 
  4. {  
  5. FileStream fs=new FileStream(  
  6. @"..\..\Test.dat",FileMode.Create);  
  7. BinaryFormatter bf=new BinaryFormatter();  
  8. bf.Serialize(fs,myCar);  
  9. }  
  10. catch(Exception e)  
  11. {  
  12. Messagebox.Show(e.Message);  
  13. }  
  14. finally 
  15. {  
  16. if(fs!=null)  
  17. fs.Close();  

ArrayList是支持序列化的,通過以上操作,myCar實例的數據都被保存到了Test.dat中。如果需要加載,則只需要反序列化:

  1. Car myCar=(Car)bf.Deserialize(fs); 

對于多重繼承情況,使用序列化還是很方便的,盡管看起來比較傻。

子類的序列化操作在父類里完成,由于不可能給this賦值,所以再在子類里操作父類里沒有的字段。

如Car的父類,Vehicle

  1. public abstract class Vehicle  
  2. {  
  3. private float _Weight;  
  4. private float _Height;  
  5. private float _Length;  
  6. public float Weight  
  7. {  
  8. get{return _Weight;}  
  9. set{_Weight=value;}  
  10. }  
  11. public float Height  
  12. {  
  13. get{return _Height;}  
  14. set{_Height=value;}  
  15. }  
  16. public float Length  
  17. {  
  18. get{retrun _Length;}  
  19. set{_Length=value;}  
  20. }  
  21. //在這里反序列化  
  22. public virtual Vehicle LoadFromFile(string filename)  
  23. {  
  24.  //反序列化后給屬性賦值  
  25.  obj=(Vehicle)bf.Deserialze(fs);  
  26.  _Weight=obj.Weight;  
  27.  _Length=obj.Length;  
  28.  _Height=obj.Height;  
  29.     
  30.  return (Vehicle)obj;  
  31. }  

在子類Car里

  1. public override Vehicle LoadFromFile(string filename)  
  2. {  
  3. //如果可以this=(Car)base.LoadFromFile(filename);  
  4. /那就好了,可以省很多。  
  5. Car car=(Car)base.LoadFromFile(filename);  
  6. _Wheels=car.Wheels;  
  7. _Lights=car.Lights;  
  8. return null;  

子類Track

  1. public override Vehicle LoadFromFile(string filename)  
  2. {  
  3. Track track=(Track)base.LoadFromFile(filename);  
  4. _Capacity=track.Capacity;  

有了這些,在構造函數中,就可以直接從文件中加載了。

  1. public Car()  
  2. {  
  3. }  
  4.  
  5. public Car(string filename)  
  6. {  
  7. LoadFromFile(filename);  
  8. }  

對于某些不支持序列化操作的對象或者結構,MSDN中說Serialzer會自動辨別,只要無法序列化,會自動標記成[NonSerialzable],通過實際操作,發現還是需要手工標記。如:

  1. [NonSerialzable]  
  2. private Microsoft.DirectX.Direct3D.Device pDevice; 

如果對象里的不可序列化字段占據了絕大部分,那也就沒有什么必要進行序列化了。

C#對象序列化的基本內容就向你介紹到這里,希望對你了解和學習C#對象序列化有所幫助。

【編輯推薦】

  1. 學習C#泛型集合類型的心得體會
  2. .net泛型類的學習總結
  3. 深度剖析C#序列化和反序列化
  4. 深入探討C#序列化和反序列化
  5. C# XML序列化應用淺析
責任編輯:仲衡 來源: 博客園
相關推薦

2009-08-25 14:59:39

C# XML序列化應用

2009-09-09 15:54:48

C# XML序列化

2009-09-09 16:53:49

C# XmlSeria序列化

2009-08-24 17:14:08

C#序列化

2009-08-06 11:16:25

C#序列化和反序列化

2009-09-09 14:45:41

XML序列化和反序列化

2011-06-01 14:50:48

2009-08-25 14:24:36

C#序列化和反序列化

2024-05-06 00:00:00

C#序列化技術

2009-08-25 14:43:26

C#序列化和反序列化

2024-03-05 12:49:30

序列化反序列化C#

2022-07-27 22:36:16

ThriftRPC開源

2009-09-09 16:30:59

C# BinaryFo

2011-06-01 15:05:02

序列化反序列化

2009-09-09 17:10:50

C# XML序列化

2018-03-19 10:20:23

Java序列化反序列化

2023-11-13 23:06:52

Android序列化

2024-01-30 13:32:51

JSON反序列化序列化

2009-06-14 22:01:27

Java對象序列化反序列化

2009-09-09 17:14:24

XML序列化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品在线播放 | 亚洲欧美日韩在线 | 日韩一区二区三区在线观看 | 一区二区三区在线 | 欧 | 欧美激情第一区 | 一本色道精品久久一区二区三区 | 91精品国产一区二区三区 | 欧美日韩国产高清 | 99久久婷婷国产精品综合 | 羞羞网站免费 | 九九九久久国产免费 | 日韩有码在线播放 | 天天射夜夜操 | 先锋av资源网 | 一区二区三区视频 | 亚洲国产小视频 | 国产精品日韩一区 | 国产午夜精品一区二区三区四区 | 精品国产一区二区国模嫣然 | 欧洲亚洲精品久久久久 | 国产精品一区二区精品 | www.日本三级 | 久久久国产精品网站 | 91精品一区 | 亚洲精品视频在线看 | 久久成人综合 | 蜜桃视频在线观看免费视频网站www | 一区二区视频 | 99re视频在线 | 本道综合精品 | 精品一二 | 日韩在线观看一区 | 国产激情 | 中文字幕高清av | 午夜免费电影院 | 欧美白人做受xxxx视频 | 午夜精品久久久久久久久久久久久 | 一区二区三区在线 | 欧 | 国产精品激情小视频 | 日韩在线电影 | 中文字幕视频一区 |