可以使用Protobuf-net部分地序列化一个对象吗?

时间:2011-06-04 16:46:20

标签: protobuf-net

我希望能够通过仅序列化/反序列化更改的字段来更新对象。 我使用的是非通用版本的序列化程序,因为我不知道编译时的类型。在运行时,我确实有类型。

在本地,我想做类似的事情:

var existingObject.SomeField = 10;

// Say I only want to serialize field B
byte[] serializedField = SerializeField(existingObject, "SomeField")

远程我会反序列化并创建一个新对象:

Merge(serializedField, existingObject);

使用NonGeneric接口似乎没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

你有几个选择。

如果你的类型在内部知道改变了什么,你可以使用与XmlSerializer(IIRC)相同的模式,即。

[ProtoMember(12)]
public string Foo {get;set;}

public bool ShouldSerializeFoo() {
    return ... true if Foo is dirty
}

第二个选项是动态创建模型,只告诉它有关更改的成员。但是,由于默认情况下会导致(随着时间的推移)生成大量动态代码,因此您可能希望将AutoCompile设置为fse。

第三种选择是通过ProtoWriter手动序列化。这可能需要更多的protobuf技术诀窍。