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

3
我正在寻找一种在两个客户端应用程序之间发送C++类的方法。我已经尝试了各种方法,发现需要为每个类创建序列化/反序列化(例如转换成JSON)函数,并通过TCP/IP进行传输。但是,我面临的主要问题是我有大约600个类(包括其他类的实例),这意味着我需要花费很多时间来编写序列化/反序列化函数。
是否有通用的方式可以编写序列化/反序列化函数? 是否有其他传送C++类的方法?
谢谢, Guy Ergas。

1
boost序列化是一个不错的选择,可以参考http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/index.html。 - john
Thrift 并不是一个糟糕的选择。它会基于一种简单易学的 IDL 语法,为你生成序列化/反序列化代码。唯一需要注意的是,在 Thrift 中无法在类型之间使用前向或循环引用。如果这对你不适用,那么 Thrift 可能是你的首选工具。 - JensG
5个回答

2
Boost Serialization
虽然我自己没有使用过,但在我的同事中非常受欢迎。
关于它的更多信息可以在"Boost (1.54.00) Serialization"中找到。
Thrift
Thrift具有非常有限的序列化功能,我认为它不符合您的要求。但即使客户端使用不同的语言,它也可以帮助您“移动”数据。
关于它的更多信息可以在"Thrift: The Missing Guide"中找到。

Thrift具有序列化功能(这就是它被定位为RPC和序列化框架的原因)。从技术上讲,序列化多多少少是一个额外的效果,因为它无论如何都需要用于RPC。 - JensG
@JensG:Thrift序列化仅适用于一些基本类型和常见数据结构(map、set和list),但它没有针对用户自定义类的开箱即用序列化。 - Roee Gavirel
1
这取决于你所谓的用户自定义自定义类是什么。Thrift允许您定义结构,然后将其转换为类。它可能不符合您的需求,但与答案所说的相反,它具有序列化支持。 - JensG

2

1
你可能会对ASN.1感兴趣。它并不是最容易使用的,而且工具/库有些难以获得(Objective Systems在http://www.obj-sys.com/index.php值得一看,但不免费)。
然而,它的最大优点是非常标准化(因此不会出现库版本不兼容的问题),并且大多数语言都得到了支持。如果需要跨多个平台进行支持,则非常方便。它还可以进行二进制编码,因此比XML更加轻量级(它也支持XML)。我出于这些原因选择了它,并没有后悔。

来自维基百科:抽象语法表示法一(ASN.1)是一种标准和符号,用于描述在电信和计算机网络中表示、编码、传输和解码数据的规则和结构。正式规则使得能够表示与机器特定编码技术无关的对象。 - DavidRR

1
尝试使用s11nnosjob
s11n(序列化的缩写)是一个开源项目,专注于在C++编程语言中对对象进行通用序列化(即对象持久化)。
nosjob是一个用于生成和消费JSON数据的C++库。

0

如果您使用的是Linux平台,可以直接使用json.h库进行序列化。以下是我找到的示例代码 :)

Json Serializer


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接