协议缓冲区可以部分序列化吗?

时间:2014-06-16 03:10:01

标签: serialization protocol-buffers

最初,程序通过自己定义的行为将数据保存到文件中。首先,数据定义如下:

struct Data{
    DWORD       m_Location;
    BYTE        m_StableCount;
    BYTE        extra[3]; /* nice 4 byte divisible value */

    // the following data is not stored in the file
    DWORD       m_Uid;
    WORD        m_Address;
};

m_Uid之前的那些字段将存储到文件中,但其他字段不存储。

现在,我想将Data转换为protocol buffer message。据我所知,消息中定义的所有字段都可以序列化。所以我必须将Data拆分为两部分:一部分包括所有已保存的字段,另一部分包括其余字段。

这是我的问题:如果我在一条消息中声明Data的所有字段,并且仅序列化协议缓冲区中的某些部分字段,该怎么办?任何API都支持它吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

这在很大程度上取决于您使用的库。许多协议缓冲区实现作为模式中的代码生成,并且 使用生成的DTO - 因此您需要将数据推送到不同的对象模型中。这是一个实现细节 - 它不是协议要求。例如,protobuf-net允许使用现有模型,并且可以忽略/包含通常特定的值(即它允许每个实例有条件序列化,使用.NET世界的标准约定来完成这些事情。但是,我假设您的问题与非.NET代码有关,在这种情况下,挑战将是找到允许这种方法的C / C ++库。