关于系列化和反序列化的一个问题2011-07-26 博客园 Acen一、情景重现昨天在做数据库同步测试的时候,用到了一点序列化和反序列化的技术。我把某个表的字段抽象成一 个实体类DiagramInfo,然后把客户端新增的记录用一个泛型集合存储,再把这个泛型集合系列化,通过 TCP发送到服务端,服务端对其进行反序列化,再把这些数据写入数据库。这大概就是这个操作的流程。序列化我用的是System.Runtime.Serialization.Iformatter类,把泛型集合序列化成二进制流。序列 化的部分代码如下: private void Seriable(List<DiagramInfo> diagrams)
{
MemoryStream stream = new MemoryStream();
IFormatter formater = new BinaryFormatter();
formater.Serialize(stream, diagrams);
stream.Flush();
serializedData = stream.ToArray();
stream.Close();
}然后使用TCP协议发送,这部分内容省略。服务端部分接收数据,并保存成MemoryStream,然后对其反序列化,部分代码如下:do
{
bytesRead = stream.Read(responseBuffer, 0, bufferSize);
memstream.Write(responseBuffer, 0, bytesRead);
}
while (bytesRead > 0);
IFormatter formater = new BinaryFormatter();
diagrams = (List<DiagramInfo>)formater.Deserialize(memstream);
stream.Close();
memstream.Close();
client.Close();