2010-01-04 61 views
1

目前我需要序列化一個包含更多自己的類對象的對象。 但問題是我不想將它保存在一個文件中,然後將其檢索到內存流中。 有什麼辦法可以直接將我的對象序列化爲流。序列化中的問題

我使用BinaryFormatter進行分離。 首先,我直接使用MemoryStream進行序列化輸出,但在反序列化時它給出錯誤 。但後來當我用一個文件序列化它,然後關閉它,並再次打開它,它完美的工作。但我想直接將它傳入流中,因爲我的程序中需要頻繁地將 傳遞給網絡客戶端。反覆使用文件 可能會減慢我的軟件。

希望我清楚我的問題。任何Sugetion?

+0

使用'MemoryStream'時出現什麼錯誤? – 2010-01-04 19:26:40

+1

您是否在談論.Net?我想你是來自你提到的類型的名字。你可否確認? – 2010-01-04 19:27:24

+0

你得到的錯誤是什麼? – JoshBerke 2010-01-04 19:27:48

回答

5

如果您嘗試從相同的MemoryStream反序列化,您是否記得先回到流的開頭?

var foo = "foo"; 
var formatter = new BinaryFormatter(); 
using (var stream = new MemoryStream()) 
{ 
    // Serialize. 
    formatter.Serialize(stream, foo); 

    // Deserialize. 
    stream.Seek(0, SeekOrigin.Begin); 
    foo = formatter.Deserialize(stream) as string; 
} 
+0

你知道我是一個非常愚蠢的人,我是怎麼忘記的。 謝謝你。 對不起,這一切煩擾你。 – Harun 2010-01-04 19:44:22

+0

+1專門提及似乎是OP的問題的尋求。 – 2010-03-09 03:16:49

+1

@哈倫,如果這個答案正確地解決了你的問題,請點擊數字下的複選標記以將其標記爲正確的答案。這給了答案的海報代表點,並幫助你自己的「%接受」分數,鼓勵人們回答你的問題。 – 2010-03-09 03:18:03

1

這是一個快速而髒的示例,它將一串字符串來回串行化。這是你想要做什麼?

static void Main(string[] args) 
     { 
      var str = "Hello World"; 

      var stream = Serialize(str); 
      stream.Position = 0; 
      var str2 = DeSerialize(stream); 

      Console.WriteLine(str2); 
      Console.ReadLine(); 
     } 

     public static object DeSerialize(MemoryStream stream) 
     { 
      BinaryFormatter formatter = new BinaryFormatter(); 
      return formatter.Deserialize(stream); 
     } 
     public static MemoryStream Serialize(object data) 
     { 

      MemoryStream streamMemory = new MemoryStream(); 
      BinaryFormatter formatter = new BinaryFormatter(); 

      formatter.Serialize(streamMemory, data); 

      return streamMemory; 

     }