问题标签 [cereal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
906 浏览

c++ - 寻找如何访问反序列化谷物 .xml 文件(谷物,C++11)中的数据的示例

我正在尝试学习如何使用谷物来使用序列化/反序列化。为了进行测试,我将 3D 场景的对象序列化为 .xml 文件(毕竟,当您实际读取输出时更容易理解)。序列化工作没有问题,反序列化似乎也这样做了。当我现在想重新创建对象时,访问第一个对象没有问题……但是我如何获得其余的对象?

.cpp 中的序列化(缩写):

它工作,并创建 testdata.xml,看起来像这样:

等等

当我现在使用

反序列化,它编译,运行,我可以访问第一组数据(ID,顶点,三角形,直到第一个</cereal>。但我不知道如何访问其余部分。

我很可能错过了一些明显的东西,而我在盯着它看的时候忽略了一些东西。但我也不确定以这种方式序列化数据是否是一种合理的方法。

0 投票
1 回答
1827 浏览

c++ - 谷物序列化错误

所以我很困惑。它不会为外部序列化函数编译。它给出了错误

谷物找不到提供的类型和存档组合的任何输出序列化函数。

所以下面的代码不能编译

但这确实编译

我从字面上将保存代码从 glm::vec3 复制并粘贴到某物,然后将 glm::vec3 更改为“某物”。这对我来说毫无意义,为什么它适用于一个而不是另一个。我认为这可能是一个命名空间的事情,但我不知道如何解决这个问题。

0 投票
1 回答
66 浏览

c++ - 防止谷物写入多态类型数据

我正在使用谷物序列化为现有协议的简单数据包格式。

然而,谷物在序列化数据前加上可移植类型信息,这是我不想要的。我不需要反序列化多态类型。

有什么办法可以防止麦片写便携类型信息吗?

0 投票
1 回答
1037 浏览

c++ - 接受谷物中带有 rapidjson 的字符串的空值,将它们设为“”

为了将 JSON 反序列化为 c++ 类,我使用了 Cereal,它使用 RapidJSON。正如预期的那样,c++ std::string 不能有空值。但是其他平台确实支持字符串的空值(.NET SQL 等),我从它们那里得到带有空值字符串的 JSON。我需要容忍这一点,只需为空值创建一个空字符串。最好的方法是什么?

我默认将 JSON 上的字符串替换为“”,如下所示,但这不是一个干净的解决方案。

如果有人根据 Cereal 生成的异常查找此答案,则为:“rapidjson 内部断言失败:IsString()”

0 投票
1 回答
581 浏览

c++11 - 谷物如何加载或保存 XML 属性

我正在尝试使用谷物保存/加载 XML 文件,但无法弄清楚如何保存/加载 XML 属性。例如:

我有一个 XML 文件:

和一个结构

如何定义序列化函数以使用谷物加载/保存 XML 属性值?

0 投票
1 回答
1662 浏览

c++ - C++/Cereal:从 JSON 反序列化到自己的类时出现异常

我正在尝试使用 VS2013 上的谷物(v1.12)将 JSON 文件中的参数加载到我自己的参数类中。

编译和加载到 POD 工作正常,但加载到我自己的类中会抛出cereal::RapidJSONException.

这是我的代码:

JSON 文件:

在调用堆栈之后显示 RapidJSON 中的 document.h:244 引发了异常:

但是,我不知道该怎么做。我怎样才能使我的代码工作?

非常感谢!

更新解决方案:

正如 ChrisBFX 所写,有必要实现 load_minimal/save_minimal 以便将 C++ 对象反序列化为 JSON 标量。

另一方面,加载/保存将 C++ 对象从/到 JSON 对象序列化。

对于我的代码,必须删除 load() 函数并将其替换为:

现在它就像一个魅力!:-)

0 投票
0 回答
80 浏览

c++ - 谷物 1.2.0 - 使用 JSON 或 XML 存档的“宽松抛出说明符”错误

我刚刚迁移到 Cereal 1.2.0(从 1.1.2 迁移),使用 JSONOutputArchive 或 XMLOutputArchive 时出现编译错误(即包括“cereal/archives/json.hpp”或“cereal/archives/xml.hpp” )

确切的错误是:

我使用-std=c++11gcc 版本 4.7.3编译

我确实需要一个std::string,所以我不能移动到二进制或便携式二进制存档。

有没有其他人在使用 Cereal 1.2.0 时遇到过这个错误?

我错过了什么吗(我不敢相信他们发布了标题甚至没有编译的东西)?

谢谢 !

0 投票
1 回答
1878 浏览

c++ - LZ4 解压未知大小的二进制内存块

我正在尝试解压缩一块内存,但我不知道它的原始未压缩大小,但是,我确实知道这个原始内存块的最大大小。

有没有办法在不知道原始未压缩大小的情况下用 LZ4 解压?

Short-Story-Long:我正在使用名为 Cereal 的第三方库将一堆变量序列化为字符串流。Cereal 将使用“便携式二进制格式”将您的数据序列化为字符串流,这意味着字节序被保留,如果需要,甚至在反序列化期间转换为主机的字节序。然后使用 LZ4 压缩字符串流并传输到远程机器进行解压缩和反序列化。

我的问题是 LZ4 将输出一个压缩数据的内存块和一个指定压缩数据大小的整数。要解压缩,您需要压缩大小和原始大小,我只是将压缩数据块发送到远程机器。

那么,有没有办法在不知道它的原始压缩大小的情况下用 LZ4 解压缩数据块?本质上是“开始减压,当你用完数据时你就完成了”

0 投票
1 回答
381 浏览

c++11 - Cereal: how to manage the implementation struct for the PIMPL idiom

I am having troubles to use cereal with the PIMPL idiom.

This is a minimal example:

b.h

b.cpp

main.cpp

And here the errors that I get on MSVC 2015 Community Edition when I try to compile the minimal example:

  • C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits(428): error C2139: 'BImpl': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_polymorphic'

  • C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\type_traits(435): error C2139: 'BImpl': an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_abstract'

I am quite sure that I am not the first attempting to do this, but I have not been able to find nothing specific in the documentation or code snippets with a working solution.

0 投票
1 回答
2126 浏览

c++ - 谷物二进制存档序列化/反序列化

我正在使用以下代码尝试将对象序列化/反序列化为二进制数据:

代码运行时,将捕获异常并显示以下消息:

"Failed to read 8 bytes from input stream! Read 0"

谁能帮我理解出了什么问题?