Vb.net 将多个对象序列化为ByteArray

Vb.net 将多个对象序列化为ByteArray,vb.net,serialization,deserialization,Vb.net,Serialization,Deserialization,我想知道一件事;如何将多个对象序列化为一个字节数组。我的目标是通过tcp发送序列化对象,接收它,然后反序列化它,然后重新创建它。 我的想法是: 字节数组中的第一件事是“数据包头”——这将告诉接收者它是什么类型的数据包;“聊天信息”、“文件传输”等。然后在标题之后,我将添加数据包本身。最后会有一个“EOF头”(这将告诉服务器是否收到了整个数据包)标题是可枚举的(作为字节)。如果出现这些错误,可能会有帮助(甚至是必要的),但可能与此相关: Public Shared Function Des

我想知道一件事;如何将多个对象序列化为一个字节数组。我的目标是通过tcp发送序列化对象,接收它,然后反序列化它,然后重新创建它。 我的想法是:
字节数组中的第一件事是“数据包头”——这将告诉接收者它是什么类型的数据包;“聊天信息”、“文件传输”等。然后在标题之后,我将添加数据包本身。最后会有一个“EOF头”(这将告诉服务器是否收到了整个数据包)标题是可枚举的(作为字节)。

如果出现这些错误,可能会有帮助(甚至是必要的),但可能与此相关:

    Public Shared Function Deserialize(Data As Byte()) As Packet
        Dim MS As New MemoryStream(Data)
        Dim BF As New BinaryFormatter
        MS.Position = 0
        ' or
        'MS.Seek(0, SeekOrigin.Begin)
        Return DirectCast(BF.Deserialize(MS), Packet)
    End Function
在对memstream进行种子设定后,流位置保留在末尾。您需要重置它,以便BF可以读取所有字节。(在序列化的数据中,您真的不需要像BOF和EOF这样的东西——即使您发送了多个东西,如果您将它们放在一个列表中,它们要么全部反序列化,要么不反序列化)


还可以看看ProtoBuf NET——更快的序列化程序生成更小的数据包,它可以让您反序列化到不同的程序集区域性类中,而NET的BF基本上不会欺骗它。

如果它们是实际的对象类型,您将遇到问题。否则,包含数据的类、列表或大多数其他容器比预期的更容易序列化。你有序列化列表的示例吗?