【发布时间】:2020-09-26 09:53:20
【问题描述】:
private byte[] ToByteArray(Message msg)
{
if(msg == null)
{
return null;
}
BinaryFormatter bf = new BinaryFormatter();
using(MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms, msg);
return ms.ToArray();
}
}
private Message ToMessageObject(Byte[] bytes)
{
if(bytes == null)
{
return null;
}
BinaryFormatter bf = new BinaryFormatter();
using (MemoryStream ms = new MemoryStream(bytes))
{
ms.Write(bytes, 0, bytes.Length);
ms.Position = 0;
Message msg = (Message)bf.Deserialize(ms);
return msg;
}
}
我正在使用上述两种方法进行序列化和反序列化,但是在反序列化过程中不断抛出错误。
system.runtime.serialization.serializationexception: '解析完成之前遇到的流结束。'
我的消息类具有“Serializable”属性。 我注意到的一件事是当文本很小时,比如两个词,它可以很好地反序列化,但是当它包含很多字符时,接近 100,那就是我得到那个错误的时候。我一直在检查这个问题的其他解决方案()frome here and other places,但似乎没有一个对我有用。
【问题讨论】:
-
输入的消息来自哪里?检查源消息的字节数,然后与接收的字节数进行比较。您正在尝试在收到所有数据之前解析数据。反序列化需要处理前的所有字节。
-
@jdweng,所以,我正在尝试实现一个通过 tcp 通信的客户端和服务器应用程序,因此消息来自另一个或相同的客户端实例。谢谢,我能够找出问题所在,我在服务器端将字节数组的大小设置为 256,所以大于 256 的所有内容都会引发错误。所以我想知道是否有任何方法可以动态判断正在发送的字节的长度
-
@JózefPodlecki,完全没有,但我已经解决了问题,我将字节数组的大小设置为一个常数,感谢您的帮助
-
你可以为此写一个答案。不明显
标签: c# .net serialization deserialization memorystream