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

标签 c# sockets serialization binary deserialization

我有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”的每个类的项目。

有什么建议?序列化时是否有一种方法可以指示正确的 namespace ?提前致谢!

编辑:
好的,是由于我被预订了一个类(class)的 Activity 而引起的,导致该问题的发生是因为我听完了该 Activity ,并且运行良好,谢谢,一直以来我都很感激。

最佳答案

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

无论如何,您都需要定义这些类型,这样就避免了将相同的代码两次放入项目中(DRY原理)。

关于c# - 通过套接字TargetInvocationException进行二进制序列化/反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17610060/

相关文章:

c# - 我可以在向服务添加 DbContext 之前从容器获取服务吗?

c# - 当 ActionBlock 开始或结束时,项目是否会从 BufferBlock 中删除?

ios - iPhone:启用蜂窝 radio 的 IPv4 Wi-Fi 访问失败

java - 关于包含无法连载的成员的连载

来自 WCF 的 JSON 响应转义名称值

c# - 将标记的枚举解析为列表的最有效方法

c# - 跨多个方法的 TransactionScope 不是 ACID?

c - 使用 popen() 通过套接字执行命令

java - 您可以向 servlet 网络应用程序添加一个额外的入口点吗?

json - 没有使用 json 编码为 go 语言中的结构获取正确的数据