TCP上的C#反序列化
我现在在反序列化通过TCP发送的对象时遇到了一个问题 反序列化时,我得到以下SerializationException(以下代码): 其他信息:二进制流“0”不包含有效的 二进制头文件。可能的原因是流或对象版本无效 在序列化和反序列化之间进行更改 序列化代码:TCP上的C#反序列化,c#,serialization,tcp,stream,C#,Serialization,Tcp,Stream,我现在在反序列化通过TCP发送的对象时遇到了一个问题 反序列化时,我得到以下SerializationException(以下代码): 其他信息:二进制流“0”不包含有效的 二进制头文件。可能的原因是流或对象版本无效 在序列化和反序列化之间进行更改 序列化代码: public static void SerializeRO(Stream stream, ReplicableObject ro) { MemoryStream serializedObjectStream =
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;
}
反序列化代码:
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;
}
公共静态列表ParseStreamForObjects(流){
列表结果=新列表();
while(true){
如果(!(流作为网络流).DataAvailable)中断;
BinaryReader br=新的BinaryReader(流);
int length=br.ReadInt32();
byte[]bytes=br.ReadBytes(长度);
MemoryStream ms=新的MemoryStream(字节);
ms.Position=0;
//错误发生在下面的行上
Add((ReplicableObject)格式化程序.反序列化(ms));
Close女士();
br.Close();
}
返回结果;
}
这些对象在运行时被序列化,所以我认为这不是版本控制问题。我不熟悉流媒体等,所以我可能错过了一些明显的东西
我想提出我认为可能的建议,但我真的被卡住了。:)
谢谢。
serializedObjectStream.Length
是一个长的
您正在向网络写入64位值,但尝试将其作为32位int
序列化对象流读取。Length
是一个长
您正在向网络写入一个64位值,但试图将其作为32位int
读取