C# 字节序列化

C# 字节序列化,c#,serialization,bytearray,binaryformatter,C#,Serialization,Bytearray,Binaryformatter,我最近与一位同事讨论了通过网络序列化字节数据的问题。 他使用BinaryFormatter类来“解析”我发送给他的字节数据。这不起作用,他显然有特殊的。。。例外情况Binaryformatter无法正确“解析”数据,因为我的数据只是一个字节数组 他设计BinaryFormatter的动机是平台独立性。我不相信这种立场。当我们都使用BinaryReader或BinaryWriter时,代码领域的工作很好 因此,BinaryFormatter的用途是什么?我应该在需要通过线路发送字节的每个场景中使用

我最近与一位同事讨论了通过网络序列化字节数据的问题。 他使用
BinaryFormatter
类来“解析”我发送给他的字节数据。这不起作用,他显然有特殊的。。。例外情况
Binaryformatter
无法正确“解析”数据,因为我的数据只是一个字节数组

他设计BinaryFormatter的动机是平台独立性。我不相信这种立场。当我们都使用
BinaryReader
BinaryWriter
时,代码领域的工作很好


因此,
BinaryFormatter
的用途是什么?我应该在需要通过线路发送字节的每个场景中使用它吗?

当然,如果您的数据是
byte[]
,那么使用
BinaryFormatter
不是明智之举。你只要把数据写在电线上就行了。但是,如果您有一组对象,并且希望将它们序列化为流,
BinaryFormatter
比手动编写每种类型的每个字段更容易使用。
BinaryFormatter
或任何序列化器/反序列化器方案的目的通常是提供一种将对象图(可能很复杂)持久化为字节序列的方法。

当然,如果您将数据作为
byte[]
,那么使用
BinaryFormatter
不是明智之举。你只要把数据写在电线上就行了。但是,如果您有一组对象,并且希望将它们序列化为流,
BinaryFormatter
比手动编写每种类型的每个字段更容易使用。一般来说,
BinaryFormatter
或任何序列化器/反序列化器方案的目的是提供一种将对象图(可能很复杂)持久化为字节序列的方法。

我觉得您可能想看看类似“协议缓冲区”的东西,它(与
BinaryFormatter
不同)是一种高性能的,低带宽、版本容限的二进制序列化格式(哇,真是太好了)

幸运的是,在.NET中有一些版本,例如

(披露:我是作者,但它是免费的;我不想卖给你任何东西——只是为你节省大量时间和痛苦)


二进制格式化程序
非常。。。易碎的它是特定于.NET的,并且具有相对较差的版本容差。我唯一一次使用它是在同一台机器上的
AppDomain
s之间进行幕后通信。否则,我会研究基于契约的序列化程序,如
XmlSerializer
DataContractSerializer
,或protobuf-net。我觉得您可能想研究类似“协议缓冲区”的东西,它(与
二进制格式化程序
)不同,是一种高性能、低带宽,允许版本的二进制序列化格式(哇,真是太好了)

幸运的是,在.NET中有一些版本,例如

(披露:我是作者,但它是免费的;我不想卖给你任何东西——只是为你节省大量时间和痛苦)

二进制格式化程序
非常。。。易碎的它是特定于.NET的,并且具有相对较差的版本容差。我唯一一次使用它是在同一台机器上的
AppDomain
s之间进行幕后通信。否则,我将研究基于契约的序列化程序,例如
XmlSerializer
DataContractSerializer
,或protobuf-net