Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
序列化/反序列化C++;班级 我正在寻找一种在2个客户端之间发送C++类的方法。 我一直在寻找这样做的方法,我所能找到的就是我需要为每个类创建序列化/反序列化(例如JSON)函数,并通过TCP/IP发送它。 我面临的主要问题是,我需要传递大约600个类(一些是类,包括其他类的实例),这意味着我需要在下一步编写序列化/反序列化函数_C++_Json_Serialization_Boost_Thrift - Fatal编程技术网

序列化/反序列化C++;班级 我正在寻找一种在2个客户端之间发送C++类的方法。 我一直在寻找这样做的方法,我所能找到的就是我需要为每个类创建序列化/反序列化(例如JSON)函数,并通过TCP/IP发送它。 我面临的主要问题是,我需要传递大约600个类(一些是类,包括其他类的实例),这意味着我需要在下一步编写序列化/反序列化函数

序列化/反序列化C++;班级 我正在寻找一种在2个客户端之间发送C++类的方法。 我一直在寻找这样做的方法,我所能找到的就是我需要为每个类创建序列化/反序列化(例如JSON)函数,并通过TCP/IP发送它。 我面临的主要问题是,我需要传递大约600个类(一些是类,包括其他类的实例),这意味着我需要在下一步编写序列化/反序列化函数,c++,json,serialization,boost,thrift,C++,Json,Serialization,Boost,Thrift,有没有编写序列化/反序列化函数的通用方法? 发送C++类还有其他方法吗?< /P> 谢谢, 盖伊·埃尔加斯。推进序列化 虽然我自己没有使用过它,但它在我的同事中非常流行。 有关它的更多信息可以在中找到 节俭 Thrift的序列化功能非常有限,我认为这不符合您的要求。但它可以帮助您将数据从一个客户端“移动”到另一个客户端,即使它们使用不同的语言。 有关它的更多信息,请参见您是否在使用框架?例如,Qt和MFC内置了序列化,这将使您的任务更容易。否则,我猜你至少需要在600门课中的每门课上花费一些精力

有没有编写序列化/反序列化函数的通用方法? 发送C++类还有其他方法吗?< /P> 谢谢,
盖伊·埃尔加斯。

推进序列化
虽然我自己没有使用过它,但它在我的同事中非常流行。
有关它的更多信息可以在中找到

节俭
Thrift的序列化功能非常有限,我认为这不符合您的要求。但它可以帮助您将数据从一个客户端“移动”到另一个客户端,即使它们使用不同的语言。

有关它的更多信息,请参见

您是否在使用框架?例如,Qt和MFC内置了序列化,这将使您的任务更容易。否则,我猜你至少需要在600门课中的每门课上花费一些精力

如上所述,Boost序列化可能是一种很好的方法,您也可以使用Boost Asio通过Tcp发送序列化类:

P>可选的,谷歌协议缓冲区(C++)有一个C++ API:

尝试或

s11n(序列化的缩写)是一个开源项目 重点关注对象的一般序列化(即对象 持久性)在C++程序设计语言中。

NoStase>>,一个用于生成和消费JSON数据的C++库。


您可能对ASN.1感兴趣。它不一定是最容易使用的,而且工具/库也有点难以获得(虽然不是免费的,但目标系统还是值得一看)


然而,最大的优点是它非常标准化(因此不存在库版本不兼容的问题),并且大多数语言都以某种方式得到支持。如果您需要跨多个平台的支持,此功能非常方便。它还进行二进制编码,因此它比XML(它也支持XML)更不臃肿。我之所以选择它是因为这些原因,并不后悔。

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


想到提振连载,节俭并不是一个坏选择。基于简单易学的IDL语法,为您生成反序列化代码将是一种负担。一个警告可能是,在Thrift中,类型之间不能有正向或循环引用。如果这不适用于您,Thrift可能是您选择的工具。Thrift确实具有序列化功能(这就是为什么它被定位为RPC和序列化框架)。从技术上讲,序列化或多或少是一种额外的效果,因为RPC无论如何都需要它。@JensG:Thrift序列化仅适用于某些基本类型和公共数据结构(映射、集和列表),但对于用户自定义类,它没有现成的序列化。这取决于用户定义的自定义类的调用方式。Thrift允许定义结构,然后将其转换为类。它可能不适合您的需要,但它具有序列化支持,与答案相反。来自Wikipedia:(ASN.1)是一种标准和符号,用于描述电信和计算机网络中表示、编码、传输和解码数据的规则和结构。形式化规则能够表示独立于特定于机器的编码技术的对象。