【问题标题】:Do classes serialized as Object lose their type information?序列化为 Object 的类会丢失它们的类型信息吗?
【发布时间】:2012-04-02 21:45:06
【问题描述】:

我有一个可序列化的 Message 类,它有一个 Data As Object 属性,我将其用作通用持有者,以便通过使用推送技术和/或 IPC 组合的系统发送信息以与任何其他对该信息感兴趣的程序。这允许通信部分不知道它传输的信息。

我将这个Data As Object 序列化为Byte[],因为我担心Object 在网络上被序列化和传输会如何表现。但是,在反序列化时,我收到有关无法找到存储在我的 Data As Object 属性中的类型的程序集的错误,因为我在包含 Message 类的程序集中反序列化...而不是包含该类型的程序集Data As Object 原来是。包含正在传输的信息描述的程序集存在于双方(虽然,我还没有弄清楚我将如何优雅地处理版本控制)。

直接发送Object 会更好吗?我想知道我是否会丢失类型信息并且无法在另一端将其转换回我想要的类型。也许在它不知道我的类型的情况下,不可能通过另一个程序集将类型作为 Object 传递?

我很有可能以完全错误的方式解决问题。替代品欣然接受。谢谢!

【问题讨论】:

    标签: .net vb.net serialization casting


    【解决方案1】:

    问:序列化的对象会丢失它们的类型吗?

    答:没有

    问:如果我在序列化之前将一个对象转换为“对象”,我会丢失 输入?

    答:是的:)

    【讨论】:

      【解决方案2】:

      序列化包括被序列化对象的运行时类型,因此不会丢失类型信息(这实际上使内置二进制序列化在以已知格式序列化已知数据时效率大大降低)。

      我正在将此数据作为对象序列化为字节[]...

      如果您的意思是在序列化 Message 对象之前将消息数据预序列化为二进制格式,那几乎肯定是不必要的。

      如果没有关于你的场景的更多细节,很难给你更具体的建议。

      【讨论】:

        猜你喜欢
        • 2015-06-20
        • 2011-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多