Повысить сериализацию: исключение архива "неподдерживаемая версия"
У меня есть исключение "неподдерживаемая версия", когда я пытаюсь десериализовать через текстовый архив некоторые данные, ранее сериализованные с помощью верхней версии Boost (1.46 для сериализации и 1.38 для десериализации)... есть ли способ понизить версию (в код) сериализация?
Что-то вроде "set_library_version"?
1 ответ
См. Ошибка чтения бинарного архива, созданного старой записью почтового архива Boost об ошибке сериализации.
Это говорит о том, что код ниже делает свою работу:
void load_override(version_type & t, int version){
library_version_type lvt = this->get_library_version();
if (boost::archive::library_version_type(7) < lvt){
this->detail_common_iarchive::load_override(t, version);
}
else
if (boost::archive::library_version_type(6) < lvt){
uint_least16_t x = 0;
* this->This() >> x;
t = boost::archive::version_type(x);
}
else
if (boost::archive::library_version_type(3) == lvt ||
boost::archive::library_version_type(5) == lvt){
#pragma message("CTMS fix for serialization bug (lack of backwards compatibility) introduced by Boost 1.45.")
// Up to 255 versions
unsigned char x = 0;
* this->This() >> x;
t = version_type(x);
}
else{
unsigned int x = 0;
* this->This() >> x;
t = boost::archive::version_type(x);
}
}
Используя text_archive ... У меня тоже была недавняя проблема с этим. Недавно я обновил ускорение с 1.67 до 1.72 в Windows, сгенерировал некоторые данные в Windows. Когда я запускал данные в своей среде Linux, которая все еще находится на Boost 1.67, они не поддерживаются.
Заголовок для 1.67 выглядел так
22 serialization::archive 16
и 1,72 выглядело как
22 serialization::archive 17
Я изменил 17 на 16, и это было хорошо для моего варианта использования.