1

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

在客户端有这个代码来序列化和对象(this = 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”的每个类的项目。

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

编辑:好的,问题是因为我订阅了课程的一个事件,得到了事件的监听并且完美地工作,谢谢大家的时间。

4

1 回答 1

1

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

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

于 2013-07-12T07:54:55.393 回答