我在使用二进制格式化程序时遇到"system.runtime.serialization.serializationexception"


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:"在解析完成之前遇到的流结束。

我的邮件类具有"可序列化"属性。 我注意到的一件事是,当文本很小时,比如两个单词,它会很好地反序列化,但是当它包含很多字符时,接近 100 个字符,那就是我收到错误的时候。我一直在检查其他解决方案((来自这里和其他地方的这个问题,但似乎没有一个对我有用。

从评论中,我能够弄清楚问题是由字节数组的初始化引起的,

var responseStream = client.GetStream()
var bytes = new byte[1024];
if (responseStream.DataAvailable)
{
await responseStream.ReadAsync(bytes, 0, bytes.Length);
var responseMessage =ToMessageObject(bytes);
messages.Add(responseMessage);
}

最初,我将字节数组长度设置为 256。每当我必须反序列化长度大于 256 的字节数组时,都会引发错误。所以,我想知道从流中读取时是否可以使用动态数组。

相关内容

最新更新