使用Protobuf-net进行差分编码

时间:2015-03-26 04:35:34

标签: protobuf-net

有没有办法用Protobuf-net序列化一个对象,这样下面的调用只会更新dataBlob中改变的值?

var dataBlob = <previous values>;
testTypeModel.DeserializeWithLengthPrefix(stream, dataBlob, typeof(DataBlob), PrefixStyle.Base128, 0, null);

例如:

var dataBlob = new DataBlob { a = 6, b = "Hello World" }
var newDataBlob = new DataBlob { a = 6, b = null }

//Expected data on the wire
var wireBlob = new DataBlob { b = null };

DeserializeWithLengthPrefix(wireBlob, dataBlob, typeof(DataBlob), PrefixStyle.Base128, 0, null);

Assert.AreEqual(newBlob, dataBlob);

1 个答案:

答案 0 :(得分:1)

如果您可以跟踪哪些字段已更改:当然,您可以使用条件序列化来实现此目的。对于属性Foo,最基本的方法是提供bool ShouldSerializeFoo()方法(protobuf-net支持的预先存在的约定)。 Merge / Deserialize方法(取决于所使用的API)支持传入预先存在的实例。

请注意,列表总是添加的。

但是,protobuf-net不会试图跟踪变化本身。