C#学习教程:C++和C#中的二进制序列化/反序列化一个是用标准C++编写的(非托管C++,在Linux平台上运行),另一个是用C#编写的。两者都通过消息总线进行通信。我有一种情况需要将对象从C++传递到C#应用程序,为此我需要在C++中序列化这些对象并在C#中反序列化它们(类似于.NET/unmarshal中的编组)。我需要以二进制而不是XML执行此序列化(出于性能原因)。当两端都在C++中实现时,我使用Boost.Serialization来实现这一点,但现在我在一端有一个.NET应用程序,Boost.Serialization不是一个可行的解决方案。我正在寻找一种解决方案,允许我跨C++和.NET边界执行(反)序列化,即跨平台二进制序列化。我知道我可以在C++DLL中实现(反)序列化代码并在.NET应用程序中使用P/Invoke,但我想将其作为最后的手段。另外,我想知道如果我使用像gzip这样的标准,这行得通吗?除了gzip还有其他选择吗?他们的优点/缺点是什么?感谢gzip不直接帮助序列化-它只是(试图)缩小流。根据流中有多少重复数据,这可能会有所帮助。对于文本很少的密集数据,我看到gzip增加了负载大小。我个人会在这里查看ProtocolBuffers(但我有偏见,因为我是许多扩展的作者之一)。您通常(但不总是)使用基本语言(.proto文件)定义消息并运行特定于语言的工具来生成类。性能非常好——专注于.NET,它可以远远超过内置的序列化器(123)我推荐使用ProtocolBuffers,它是Google自己的序列化库。它具有.Net、C++和Java序列化程序。大多数实现也非常快。http://code.google.com/p/protobuf/另一种可能性是Thrift,它有更多的后端,并在需要时提供网络通信所需的大部分代码——如果你想扩展.如果您只想进行简单的对象序列化,我会看看json.org。有许多C++/.NET实现。以上就是C#学习教程:C++和C#中的二进制序列化/反序列化分享的全部内容。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络收藏,不代表立场,如涉及侵权,请右击联系管理员删除。如需转载请注明出处:
