我们将数据库表中的protobufs保存为Byte [] s。但是,我们遇到的情况是,我们必须在保存后更新protobufs。这产生了两个问题 - (1)我们必须序列化/反序列化它们以更新它们并将它们保存回来。(2)我们必须在更新代码中复制protobuf层次结构(如果obj.getType()== typeOf(A) ))然后...... else(如果type ==)做...
有没有办法修改Byte []而无需序列化/反序列化并识别protobuf类型?
由于 和Manish
答案 0 :(得分:1)
协议缓冲区格式通常用作不透明格式,这意味着:您不希望知道内部 - 您只需加载的典型方案 它,做出你的改变,坚持下去。幸运的是,这种格式简洁而有效,因此这根本不是问题。
作为比较,您不会期望在不使用BinaryFormatter
的情况下编辑BinaryFormatter
数据,并且大多数人仍然会使用序列化程序对xml / json进行更改,因为格式是足够复杂,不值得尝试编写可以强有力地处理它的vanilla代码。
然而!如果确定在没有序列化程序的情况下处理protobuf数据,您还可以使用读取器/写入器API。这与XmlReader
/ XmlWriter
一样,假设您对基础规范有很多了解,并且您仍然需要知道您感兴趣的字段编号(尽管您不需要了解你不感兴趣的领域。
如果您有非常具体的(即可运行)示例,我可能会告诉您如何执行此操作。然而!我会建议,最简单的事情可能是围绕模型。
但是,我有点不清楚为什么你需要“复制protobuf层次结构”。默认情况下,Protobuf-net不关心一点实际类型是什么(只要它们符合合同)。如果方案是您正在对DTO进行更改,则:RuntimeTypeModel
功能来重新模拟两个版本的模型之间的差异 - 通过两个不同的RuntimeTypeModel
配置(可能其中一个涉及代理,或使用不同的属性等)我需要看到你想要解决的问题,以便进一步提出建议。