2011-09-01 101 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