我希望能够通过仅序列化/反序列化更改的字段来更新对象。 我使用的是非通用版本的序列化程序,因为我不知道编译时的类型。在运行时,我确实有类型。
在本地,我想做类似的事情:
var existingObject.SomeField = 10;
// Say I only want to serialize field B
byte[] serializedField = SerializeField(existingObject, "SomeField")
远程我会反序列化并创建一个新对象:
Merge(serializedField, existingObject);
使用NonGeneric接口似乎没有办法做到这一点?
答案 0 :(得分:1)
你有几个选择。
如果你的类型在内部知道改变了什么,你可以使用与XmlSerializer(IIRC)相同的模式,即。
[ProtoMember(12)]
public string Foo {get;set;}
public bool ShouldSerializeFoo() {
return ... true if Foo is dirty
}
第二个选项是动态创建模型,只告诉它有关更改的成员。但是,由于默认情况下会导致(随着时间的推移)生成大量动态代码,因此您可能希望将AutoCompile设置为fse。
第三种选择是通过ProtoWriter手动序列化。这可能需要更多的protobuf技术诀窍。