我有一个可序列化Message
类,它具有Data As Object
属性,我将其作为通用持有者,用于通过使用推送技术和/或IPC组合的系统发送信息与任何其他对信息感兴趣的程序进行通信。这允许通信部件不知道它传输的信息。
我将此Data As Object
序列化为Byte[]
,因为我担心序列化并通过网络传输的Object
如何在另一端表现。但是,在反序列化时,我收到有关无法找到存储在Data As Object
属性中的类型的程序集的错误,因为我在包含Message
类的程序集中反序列化...而不是程序集包含Data As Object
最初的类型。包含所传输信息描述的程序集存在于双方(虽然,我还没弄清楚我将如何优雅地处理版本控制)。
直接发送Object
会更好吗?我想知道我是否会丢失类型信息并且无法将其转换回我想要的另一端类型。也许在不知道我的类型的情况下,不能通过另一个程序集将类型作为Object
传递?
我很有可能完全以错误的方式解决问题。替代品很乐意接受。谢谢!
答案 0 :(得分:2)
问:序列化对象是否会丢失其类型?
答:没有
问:如果我在序列化之前将对象强制转换为“对象”,那么我是否已经失去了对象 类型?
答:是的:)
答案 1 :(得分:0)
序列化包括被序列化对象的运行时类型,因此类型信息不会丢失(实际上,当以已知格式序列化已知数据时,内置二进制序列化效率会大大降低。)
我将此数据作为对象序列化为字节[] ...
如果您的意思是在将序列化Message对象之前将消息数据预序列化为二进制格式,那几乎肯定是不必要的。
如果没有关于您的方案的更多详细信息,很难为您提供更具体的建议。