2011-09-01 106 views
0

我现在有一个反序列化通过TCP发送的对象的问题。通过TCP进行C#反序列化

反序列化的时候,我得到以下SerializationException(下面的代码):

其他信息:二进制流 '0' 不包含有效 BinaryHeader。可能的原因是无效的流或对象版本 序列化和反序列化之间的变化。

序列化代码:

public static void SerializeRO(Stream stream, ReplicableObject ro) { 
      MemoryStream serializedObjectStream = new MemoryStream(); 
      Formatter.Serialize(serializedObjectStream, ro); 
      BinaryWriter bw = new BinaryWriter(stream); 
      bw.Write(serializedObjectStream.Length); 
      serializedObjectStream.WriteTo(stream); 
      serializedObjectStream.Close(); 
      bw.Close(); 
     } 

反序列化代码:

public static List<ReplicableObject> ParseStreamForObjects(Stream stream) { 
     List<ReplicableObject> result = new List<ReplicableObject>(); 
     while (true) { 
      if (!(stream as NetworkStream).DataAvailable) break; 
      BinaryReader br = new BinaryReader(stream); 
      int length = br.ReadInt32(); 
      byte[] bytes = br.ReadBytes(length); 
      MemoryStream ms = new MemoryStream(bytes); 
      ms.Position = 0; 
          // ERROR OCCURS ON THE LINE BELOW 
      result.Add((ReplicableObject) Formatter.Deserialize(ms)); 
      ms.Close(); 
      br.Close(); 
     } 
     return result; 
    } 

的对象是正在连载在运行时,所以我不认为这是一个版本的问题。我是流媒体等新手,所以我可能错过了一些明显的东西。

我想建议我认为它可能是什么,但我真的卡住了。 :)

谢谢。

回答

5

serializedObjectStream.Lengthlong

您正在为网络写入64位值,但您试图将其读取为32位int

+1

好景点+1 :) – leppie

+0

谢谢SLaks。 – Xenoprimate