通过套接字TargetInvocationException进行二进制序列化/反序列化

时间:2013-07-12 07:49:38

标签: c# sockets serialization binary deserialization

我有3个项目,第一个是客户端,第二个是服务器,最后一个是BroadcastMessage:

在客户端有这个代码来序列化和对象(这= BroadcastMessage):

public MemoryStream SerializeObject()
{
     MemoryStream stream = new MemoryStream();

     BinaryFormatter formatter = new BinaryFormatter();

     formatter.Serialize(stream, this);

     return stream;
}

然后,我将此流转换为byte []并通过套接字发送到服务器,在那里,我反序列化:

BinaryFormatter formatter = new BinaryFormatter();
Stream str = new MemoryStream(inMessage);
BroadcastMessage m = (BroadcastMessage) formatter.Deserialize(str);

客户端和服务器之间的通信是正确的,我收到完整的流,但是当我尝试反序列化时,根本不工作,给我一个TargetInvocationException,原因是试图找到对象(BroadcastMessage)所在的项目序列化。如果我将此项目添加到服务器,反序列化可以正常工作,但我无法添加使用此“BroadcastMessage”的每个类的项目。

有什么建议吗?在序列化时有没有办法指出正确的命名空间?提前谢谢!

编辑: 好的,这个问题是因为我在课堂上订阅了,听完了事件并完美地工作,感谢所有的时间。

1 个答案:

答案 0 :(得分:1)

您不需要参考整个项目。具有特定类型的组件就足够了。因此,您应该将所有需要(de)序列化的类型放在它们自己的程序集中,并从两个项目中引用它。

无论如何你需要定义这些类型,这样你就可以在项目中放弃两次相同的代码(DRY原则)。