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

时间:2013-10-06 06:36:43

标签: c++ json serialization boost thrift

我正在寻找一种在两个客户端aptication之间发送C ++类的方法。 我正在寻找一种方法,我可以找到的是我需要为每个类Serialize / Deserialize(例如JSON)函数创建并通过TCP / IP发送它。 我正面临的主要问题是我需要传递约600个类(其中一些是包括其他实例的类),这意味着我需要花费下一个编写序列化/反序列化函数。

是否有编写Serialize / Deserialize函数的通用方法? 有没有其他方式发送C ++类?

谢谢, 盖伊尔加斯。

5 个答案:

答案 0 :(得分:1)

提升序列化
虽然我没有把它用在自己身上,但在工作中我的同龄人却非常受欢迎 有关它的更多信息可以在"Boost (1.54.00) Serialization"

中找到

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

中找到

答案 1 :(得分:1)

您是否正在使用框架?例如,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/

答案 2 :(得分:1)

尝试s11nnosjob

  

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

     

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

  

Json Serializer