2011-01-19 65 views
4

我們可以輕鬆地將類序列化爲平面文件,但是如果我想將類序列化爲數據庫,那麼我該如何做,如果有可能,那我該如何反序列化數據庫中的數據上課。 請給在c#中的示例代碼。如何將類序列化爲數據庫而不是文件系統c#

感謝

+1

你可以序列化/反序列化到任何流 - 基本上你得到的是一堆f字節 - 可以保存在文件或數據庫中(在Sql Server中使用varbinary列,在oracle中使用blob)。 – VinayC 2011-01-19 08:40:46

回答

8

與其他人一樣,您可以使用二進制序列化來獲取內存流中的Byte []數組,然後在Blob/image類型的數據庫中創建一個列來存儲字節數組。

然後同時回讀,你就回用技術稱爲反序列化

系列化讀取流中的列的值

BinaryFormatter bf = new BinaryFormatter(); 

     List<SearchFilterDetails> _list = QueryFilterDetails.ToList<SearchFilterDetails>(); 

     using (MemoryStream ms = new MemoryStream()) 
     { 
      bf.Serialize(ms, _list); 
      return ms.GetBuffer(); 
     } 

反序列化

private void DeSerilizeQueryFilters(byte[] items) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 

     List<SearchFilterDetails> _list = new List<SearchFilterDetails>(); 

     try 
     { 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       ms.Write(items, 0, items.Length); 
       ms.Position = 0; 

       _list = bf.Deserialize(ms) as List<SearchFilterDetails>; 
      } 

      foreach (SearchFilterDetails mobj in _list) 
      { 
       QueryFilterDetails.Add(mobj); 
      } 
     } 
     catch (Exception ex) 
     { 
     } 
    } 
1

使用二進制序列到BLOB列,或使用XML \數據接觸\淨數據接觸以XML列。

編輯:@Saurabh已經給出的二進制例子。 數據合同示例Peter Ritchie's blog提供。

1

序列化對象時,通常會對流進行處理。您可以序列化爲內存流,然後將字節讀回並放入數據庫。

你目前有什麼序列化代碼?最好告訴你如何修改它,而不僅僅是給你完整的代碼。

1

您可以將一個類(開箱即可)序列化爲二進制形式或XML。
在第一種情況下,您將獲得byte[],第二種情況下,您將獲得一個簡單的string
如果您想將其保存在數據庫中,請將其作爲任何其他需要發送到數據庫的字節數組或字符串(或XML,如果您的數據庫本地支持)。

2

托馬斯,你在你的應用程序中使用了什麼樣的數據訪問邏輯?

如果您正在尋找一種與數據庫進行交互並存儲/檢索對象的方法,您還可以看一下實體框架或NHibernate,這樣的ORM允許您關注應用程序中真正重要的內容,以及而不是在加載或保存對象/實體的方式上。

1

將對象序列化爲XML。嘗試讓數據集從該XML Blob中讀取。 爲數據集中的每個表/行創建一個DB create語句。

相關問題