我是 Cereal 的新手,我很难理解如何反序列化 JSON 字符串。不幸的是,我的工作防火墙限制我访问 Google 网上论坛以在留言板上发帖。
我有一个可以变成 JSON 字符串的类,但我不能终生使用该字符串并重新创建该类。任何帮助都将不胜感激,请温柔我刚从学校毕业,这是我的第一份工作,我已经超出了我的深度。
这是我得到的错误:
在抛出 'cereal::RapidJSONException' what() 实例后调用终止:rapidjson 内部断言失败:IsObject()
下面是 MyClass.hpp 类:
#include <cstdio>
#include <iostream>
#include <string>
#include "../cereal/access.hpp"
class MyClass{
Public: //function declarations
template<class Archive> // public serialization (normal)
void serialize(Archive & ar)
{
ar(x, y, z);
}
private: // member variables
string x;
int y;
bool z;
};
下面是我的 Main.cpp:
#include <../cereal/types/unordered_map.hpp>
#include <../cereal/types/memory.hpp>
#include <../cereal/types/concepts/pair_associative_container.hpp>
#include <../cereal/archives/json.hpp>
#include <../cereal/types/vector.hpp>
#include <iostream>
#include <fstream>
#include "MyClass.hpp"
int main(){
// serialize (this part all works... i think)
{
// create a class object and give it some data
MyClass data("hello", 6, true);
// create a string stream object
std::stringstream os;
// assign the string stream object to the Output Archive
cereal::JSONOutputArchive archive_out(os);
//write data to the output archive
archive_out(CEREAL_NVP( data ));
// write the string stream buffer to a variable
string json_str = os.str();
}
// deserialize
{
// create a string stream object and pass it the string variable holding the JSON archive
std::stringstream is( json_str );
// pass the stream sting object into the input archive **** this is the line of code that generates the error
cereal::JSONInputArchive archive_in( is );
// create a new object of MyClass
MyClass data_new;
// use input archive to write data to my class
archive_in( data_new );
}
}