Это моя строка json
{
"connectionString" : "MyConnectionString",
"value" :"MyVal"
}
это мой класс
struct Settings
{
std::string connectionString;
std::string value;
template<class Archive>
void serialize(Archive& ar)
{
ar(CEREAL_NVP(connectionString),
CEREAL_NVP(value)
);
}
};
И вот что я делаю:
std::ifstream ifs("Settings.json");
std::string content((std::istreambuf_iterator<char>(ifs)),(std::istreambuf_iterator<char>())); // Yes this is valid - The content gets populated
Settings settings;
{
cereal::JSONInputArchive archive_in(ifs);
archive_in(settings); //<<-----Exception here - Unhandled exception
}
Приведенное выше решение будет работать, только если моя строка json будет такой (т.е.), если вся строка json будет объектом другого ключа.
{
"SomeThing" :{
"connectionString" : "MyConnectionString",
"value" :"MyVal"
}
}
Мой вопрос в том, как я могу заставить свою настоящую строку json работать (без переноса ее в объект)? В настоящее время у меня есть это в файле json
{
"connectionString" : "MyConnectionString",
"value" :"MyVal"
}
и я хотел узнать, как лучше всего десериализовать это в объект?
archive_in
, чтобы узнать, что это означает в этом контексте? Вы убедились, что потокifs
действителен? Вы убедились, что строкаcontent
содержит то, что, по вашему мнению, должно быть? Зачем вы создаете поток, извлекаете его содержимое, а потом из них сразу создаете другой поток? Почему бы просто не передатьifs
конструкторуarchive_in
? Так много вопросов... - person Asteroids With Wings   schedule 16.11.2020