序列化物件(.NET中) (轉)
序列化(中)
其實是個很老的話題,有的時候都覺得這不算個問題.不過好久沒發表東西了
隨便寫點.不過說實話,現在很多中的例子是beta版裡的,我提供的是正式
版的.因此我想還是有一定價值的.
首先什麼是序列化呢?簡單的說就是把物件例項到中的方法.因此序列
化過程就是儲存物件的狀態.那就是說把成員資料寫如磁碟同時保持原有結構.
那麼針對序列化過程,同樣也存在反序列化.我想大家已經猜到了,就是吧已經
序列化的物件在讀出來.思想很簡單,是吧,那麼我再來舉一個小的例子,力圖吧
一個完整的序列化過程描述清楚.由於本人對了解的更加習慣.所以例子我也是
使用C#寫的,但是本質上.NET使用的是同一套 也是同一套CTS並且都
依照同樣的編碼約定,因此是一致的,
那麼現在編碼開始階段我先來介紹兩個名稱空間給大家,因為要在編碼過程中用到.
System.Runtime.Serialization
System.Runtime.Serialization.Formatters.Binary
關於這兩個名稱空間請大家參考MSDN:
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemRuntimeSerialization.htm
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemRuntimeSerializationFormattersBinary.htm
例子如下:
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public class SerialTest
{
public void SerializeNow()
{
YarshrayToSerialize Y=new YarshrayToSerialize();
Stream s=File.Open("temp.dat",FileMode.Create);
BinaryFormatter b=new BinaryFormatter();
b.Serialize(s,Y);
s.Close();
}
public void DeSerializeNow()
{
YarshrayToSerialize Y=new YarshrayToSerialize();
Stream s=File.Open("temp.dat",FileMode.Open);
BinaryFormatter b=new BinaryFormatter();
Y=(YarshrayToSerialize)b.Deserialize(s);
Console.WriteLine("Name is: "+Y.name);
Console.WriteLine("Age is: "+Y.age);
Console.ReadLine();
s.Close();
}
public static void Main(string[] s)
{
SerialTest st=new SerialTest();
st.SerializeNow();
st.DeSerializeNow();
}
}
[Serializable()]
public class YarshrayToSerialize
{
public int age=21;
public string name="yarshray";
}
最後輸出結果:
Name is: yarshray
Age is: 21
那麼我們來看這個例子.我們重點要看那裡?細心的朋友可能已經看到[Serializable()]
這個特性了.我們知道,特性在.NET中是用來描述物件或方法,要具備那些功能的.[Serializable()]
這個特性就表明了該物件具備序列化功能.(詳細參考:MSDN
ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfSystemSerializableAttributeMembersTopic.htm)
那麼下面我再來說一下序列化的步驟.我首先定義了一個類叫做YarshrayToSerialize一看就知道
把我自己的資訊序列化.我在這個類上面加入了特性[Serializable()],要告訴RUNTIME我這個類
是要在執行時進行序列化的.這裡我要提一點,如果你不要[Serializable()]這個特性那麼編譯是
可以透過的.可是執行時就會丟擲一個異常.這就說明序列化是在執行其間的操作.其實你從
名稱空間也可以看的出來.然後我在我的SerialTest類中,讀寫磁碟.把資訊儲存到一個叫做temp.dat
的中,當然這個檔案是我自定義的,你也可以定義其它的.這裡用到了流物件和檔案物件的操作.
這是IO操作.不在本文範圍內,如果你還不清楚,可以參考.Net的IO操作.在主中我直接了
兩個方法.一個是序列化,一個是反序列化.這裡重點程式碼就是BinaryFormatter.Serialize(s,Y)
和 BinaryFormatter.Deserialize(s)這個方法返回的是一個因此我在這裡進行了一次
拆箱操作(對於拆箱請不要和強制型別轉化及這個物件虛指標放在一個概念.當然這也不在本文
討論範圍內).
那麼接下來,我要說一下序列化物件的基本步驟,因為我上面的只是一個簡單的例子,如果複雜的
操作它的基本步驟是不會變的.這裡我覺得應該分為四個步驟來進行:
1.首先我要建立物件例項(也就是這一句YarshrayToSerialize Y=new YarshrayToSerialize();
把類例項化為物件)其目的就是為了吧這個物件的狀態儲存到磁碟中
2.需要建立一個流物件來讀寫檔案物件
3.需要建立一個具有序列化功能的物件(這裡我用到的是BinaryFormatter當然如果你序列化
就需要Formatter)
4.那很顯然,就是把物件例項透過serialize方法進行序列化儲存.
反序列化和這個類似,只是把serialize方法變為這個Deserialize方法.那麼步驟是相同的.
你可以結合上面的程式碼來看看.那麼關於序列化的話題我就講到這裡,那麼複雜的類操作基本
步驟是一樣.你只要加入屬性和方法等就可以了.
最後談點題外話,序列化技術已經被多種FrameWork封裝,並提供相應的功能呼叫.這作為物件
的永久儲存的作用是非常明顯的.當然你在反序列化過程中必須要支援動態建立否則就沒意義
了嘛.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004602/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- .net中物件序列化技術淺談物件
- .NET物件的XML序列化和反序列化物件XML
- .NET 中Newtonsoft的使用 自定義物件的序列化物件
- VB.NET中物件的克隆 (轉)物件
- Python中物件序列化和反序列化Python物件
- C#中的物件序列化C#物件
- C#中物件的序列化與反序列化C#物件
- 物件序列化(序列化)物件
- JavaScript 物件序列化JavaScript物件
- java物件序列化Java物件
- .NET物件克隆的深究 (轉)物件
- JSON 物件序列化、反序列化JSON物件
- ArcObjects SDK開發 025 AO中物件的序列化和反序列化Object物件
- Java 中的 transient 關鍵字和物件序列化Java物件
- VB.NET中的物件導向程式設計特徵 (轉)物件程式設計特徵
- 物件的序列化(Serialization)物件
- 理解Java物件序列化Java物件
- [.net 物件導向程式設計進階] (12) 序列化(Serialization)(四) 快速掌握JSON的序列化和反序列化物件程式設計JSON
- 物件(List<T>)的序列化和反序列化物件
- java 物件序列化要序列化那些內容Java物件
- C#中實現JSON功能及物件的序列化和反序列化C#JSON物件
- [.net 物件導向程式設計進階] (9) 序列化(Serialization) (一) 二進位制流序列化物件程式設計
- 在ASP.NET中物件導向的程式設計思想 (轉)ASP.NET物件程式設計
- netty系列之:使用Jboss Marshalling來序列化java物件NettyJava物件
- Java物件流與序列化Java物件
- java培訓教程分享:Java中怎樣將資料物件序列化和反序列化?Java物件
- ASP.NET 頁面物件模型 (轉)ASP.NET物件模型
- Java物件的序列化和反序列化實踐Java物件
- .net序列化與反序列化總結
- [.net 物件導向程式設計進階] (10) 序列化(Serialization)(二) 通過序列化部落格園文章學習XML的序列化物件程式設計XML
- Kubernetes 中 Secrets 物件的使用物件
- ASP.NET中Server物件的方法ASP.NETServer物件
- Java物件的序列化與反序列化-Json篇Java物件JSON
- Java基礎22--物件序列化和反序列化Java物件
- 談談 JAVA 的物件序列化Java物件
- JavaScript物件序列化為JSONJavaScript物件JSON
- 深入理解Java物件序列化Java物件
- 使用jackson序列化物件物件