У меня теперь проблема с десериализацией объекта, отправленного по TCP.
При десериализации я получаю следующее исключение 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;
}
Объекты сериализуются во время выполнения, поэтому я не думаю, что это проблема управления версиями. Я новичок в потоковой передаче и т. Д., Поэтому я мог упустить что-то очевидное.
Я хотел бы предложить, что я думаю, но я действительно застрял. :)
Спасибо.