gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:05:36 24 4
gpt4 key购买 nike

我有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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com