顯示具有 DotNetFramework-序列化 標籤的文章。 顯示所有文章
顯示具有 DotNetFramework-序列化 標籤的文章。 顯示所有文章

2013年1月25日 星期五

Json 序列化

JavaScriptSerializer 是 .Net3.5 才加進來的類別, 可以用來將指定的 JSON 字串轉換成物件圖形。

public string Serialize(object obj);           
public object Deserialize(string input, Type targetType);
public T Deserialize<T>(string input);
public object DeserializeObject(string input);
  • Serialize :將物件或連接之物件的圖形序列化至指定資料流。
  • Deserialize :將資料流還原序列化至物件圖形。
  • DeserializeObject :將指定的 JSON 字串轉換成物件圖形。

2012年1月26日 星期四

序列化物件

什麼是序列化 (Serialization)

當宣告一個字串或數值變數並給定一些資料後,若須要將這些資料儲存起來,我想這沒多大問題,甚至自訂一個格式,日後還可以把它讀入相同型別的變數。 不過,如果這個變數是一個自訂的類別,例如 Employee ,或者一個 .NET 參考型別,如 Font、Hashtable、Datatable 類別等等,那你又會如何儲存呢? 這時,我們需要將物件資料轉成某個特定格式,這樣子才有辨法儲存至檔案、或者傳送給另一個程式、或者透過網路傳輸。 這樣子的一個轉換過程,就稱為 序列化 (Serialization) 。

序列化可分成二個階段:

  • 序列化 (Serializing) : 將一個 object 轉換成線性的 byte[] 資料,以方便資料的儲存與傳輸。
  • 還原序列化 (Deserializing) : 將先前序列化的資料轉換成 object。

XML 序列化

什麼是 XML

  • XML 是一種以文字為主的標準化格式,可用來儲存應用程式的資訊,且具可讀性。
  • XML 可以儲存任何型別的資料,包括文件、圖片、音樂、二進位檔案等資訊。

自訂序列化

當我們使用 BinaryFormatter 或 XmlSerializer 去序列化一個類別時,系統會依設定幫我們直接產生序列化後的資訊。 但是,如果遇到版本的問題,或者某些類別不支援序列化時,導至還原序列化後的資訊不符合需求, 這時候就是使用自訂序列化的時候,也就是覆寫.NET Framework內建的序列化程式,並自行撰寫程式碼以控制序列化後的資訊。 使用自訂序列化,可以在不破壞該類別的前提下,達到上述問題的解決。

如何實作自訂序列化

若要自訂序列化,就要實作 ISerializable 介面,並且將 Serializable 屬性套用到該類別即可。

要實作 ISerializable 介面,就必須實作以下二件事:

  1. 實作 GetObjectData 方法,在這方法中填入序列化所需的資訊到 SerializationInfo 物件之中。
  2. 建立用來還原序列化時的特殊建構函式。

這個方法和建構函式的參數都是 SerializationInfo 和 StreamingContext 型別。
在 GetObjectData 方法之中,主要必須撰寫的程式碼,就是使用 AddValue 方法,將想要序列化的變數,以 name/value 方式加入到 SerializationInfo 物件之中。
使 SerializationInfo 這個物件具有足夠的序列化資訊,以便在還原序列化過程中用來重建該物件。