2010-01-04 139 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; 

     }