我有两个程序,一个是用C写的,另一个是用C#写的。在C#程序中,我使用BinaryFormatter().Serialize()方法序列化数据模型,然后通过TCP套接字将序列化的二进制流发送到C程序。现在,在C程序中,我想提取数据,以便了解BinaryFormatter().Serialize()如何生成字节流的格式。我想用C写一个反序列化函数,用于在C#中重新生成BinaryFormatter().Serialize()序列化的数据。是否有相关的文件或信息?
BinaryFormatter().Serialize()
jgwigjjp1#
在C中从BinaryFormatter反序列化数据的唯一方法是调用.net框架并使用BinaryFormatter。但这真的不是通过网络传输数据的最佳方式。BinaryFormatter速度慢,不安全,脆弱。格式甚至可能在两个.net版本之间发生变化。更好的方法是使用序列化格式,用于不同系统之间的通信。我用过Protobuf.net,效果很好,C应该有一些protobuf的实现。BSON、基于文本的格式(如json/xml)也可能是替代方案。如果您正在编写一个“性能密集型”应用程序,那么在选择库之前查看一些benchmarks,或者自己进行性能测试,可能是一个好主意。在我见过的基准测试中,BinaryFormatter通常是最慢的替代品,因此如果您关心性能,它不是一个好的选择。我使用它的唯一原因是从一些遗留系统中阅读数据。
1条答案
按热度按时间jgwigjjp1#
在C中从BinaryFormatter反序列化数据的唯一方法是调用.net框架并使用BinaryFormatter。
但这真的不是通过网络传输数据的最佳方式。BinaryFormatter速度慢,不安全,脆弱。格式甚至可能在两个.net版本之间发生变化。
更好的方法是使用序列化格式,用于不同系统之间的通信。我用过Protobuf.net,效果很好,C应该有一些protobuf的实现。BSON、基于文本的格式(如json/xml)也可能是替代方案。
如果您正在编写一个“性能密集型”应用程序,那么在选择库之前查看一些benchmarks,或者自己进行性能测试,可能是一个好主意。在我见过的基准测试中,BinaryFormatter通常是最慢的替代品,因此如果您关心性能,它不是一个好的选择。我使用它的唯一原因是从一些遗留系统中阅读数据。