二进制格式反序列化

Aji*_*nan -1 .net c c# binaryformatter

我有两个程序,一个是用 C 编写的,另一个是用 C# 编写的。在C#程序中,我使用BinaryFormatter().Serialize()方法序列化数据模型,然后通过TCP套接字将序列化的二进制流发送到C程序。现在在C程序中,我想提取数据,以便我想知道如何BinaryFormatter().Serialize()生成字节流的格式。我想用 C 编写一个反序列化器函数,用于重新生成BinaryFormatter().Serialize()C# 中序列化的数据。有可用的文档或信息吗?

Jon*_*asH 6

在 C 中从 BinaryFormatter 反序列化数据的唯一方法是调用 .net 框架并使用 BinaryFormatter。

但这确实不是通过网络传输数据的最佳方式。BinaryFormatter 速度慢、不安全且脆弱。两个 .net 版本之间的格式甚至可能会发生变化。

更好的方法是使用用于不同系统之间通信的序列化格式。我使用 Protobuf .net 取得了良好的结果,C 应该有一些 protobuf 实现。BSON、json/xml 等基于文本的格式也可能是替代方案。

如果您正在编写“性能密集型”应用程序,那么在选择库之前查看一些基准测试或进行自己的性能测试可能是个好主意。在我见过的基准测试中,BinaryFormatter 通常是最慢的替代方案,因此如果您担心性能,它不是一个好的选择。我使用它的唯一原因是从某些遗留系统读取数据。