提升序列化:存档"unsupported version"异常



当我尝试通过文本存档反序列化某些以前使用 Boost 较高版本序列化的数据(1.46 用于序列化,1.38 用于反序列化)时,我遇到了异常"不支持的版本"......有没有办法降级(在代码中)序列化?

像"set_library_version"之类的东西?

请参阅错误读取二进制存档,由旧的 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 ...我最近也遇到了一个问题。我最近在Windows上将boost从1.67升级到1.72,在Windows上生成了一些数据。当我在仍在 Boost 1.67 上的 Linux 环境中运行数据时,它抛出不支持

1.67 的标题如下所示

22 serialization::archive 16

和 1.72 看起来像

22 serialization::archive 17

我将 17 更改为 16,这对我的用例很满意。

相关内容

  • 没有找到相关文章