序列化/反序列化C++类

Serialize/ Deserialize C++ classes

本文关键字:C++ 反序列化 序列化      更新时间:2023-10-16

我正在寻找一种在 2 个客户端应用程序之间发送C++类的方法。我一直在寻找一种方法,我能找到的就是我需要为每个类创建序列化/反序列化(例如 JSON)函数并通过 TCP/IP 发送。我面临的主要问题是我需要传递 ~600 个类(有些是包括其他实例的类),这意味着我需要在下一次编写序列化/反序列化函数上花费时间。

是否有任何通用方法编写序列化/反序列化函数?有没有其他方法发送C++类?

谢谢盖伊·埃尔加斯。

你到底在使用框架吗?例如,Qt和MFC内置了序列化功能,这将使您的任务更轻松。否则,我猜你至少需要在 600 个类中的每一个上花费一些精力。

如上所述,Boost Serialization 可能是一个不错的方法,您也可以使用 Boost Asio 通过 Tcp 发送序列化类:http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio.html

或者,有一个用于 Google Protocol Buffers (protobuf) 的C++ API:https://developers.google.com/protocol-buffers/docs/reference/cpp/

提升序列化
虽然我自己没有用过它,但它在工作中在同龄人中很受欢迎。
有关它的详细信息,请参阅"提升 (1.54.00) 序列化"

节俭
节俭具有非常有限的序列化功能,我认为这不符合您的要求。但它可以帮助您将数据从一个客户端"移动"到另一个客户端,即使它们使用不同的语言。
有关它的更多信息可以在"Thrift: The Missing Guide"中找到

尝试s11n或nosjob

s11n(序列化的缩写)是一个开源项目 专注于对象的通用序列化(即对象 持久性)在C++编程语言中。

nosjob,一个用于生成和使用 JSON 数据的C++库。

您可能对 ASN.1 感兴趣。它不一定是最容易使用的,工具/库有点难获得(http://www.obj-sys.com/index.php 的Objective Systems值得一看,尽管不是免费的)。

然而,最大的优势是它非常标准化(所以没有库版本不兼容的问题),并且大多数语言都以某种方式得到支持。如果您需要跨多个平台的支持,这很方便。它还进行二进制编码,因此它比XML(它也支持XML)更少膨胀。出于这些原因,我选择了它,并不后悔。

如果你在linux平台,可以直接使用json.h库进行序列化。这是我遇到的示例代码:)

Json 序列化程序