如何实现部分序列化?

时间:2010-06-14 15:11:50

标签: c# .net serialization xml-serialization

我最近做了很多序列化开发,主要是通过套接字发送对象,但我遇到了一个有趣的问题:是否有可能通过一个对象发送一些属性串行器?

我想象的场景是这样的:每个客户端都有某种“状态”对象,由许多属性(字符串,整数,布尔等)组成。当您的客户端首次连接时,整个状态对象通过Xml或二进制序列化程序进行序列化,并通过套接字发送,以便在另一端重新创建。现在客户端和服务器都具有相同的状态对象。然后,您的服务器需要更改状态,只需设置一个状态对象的属性即可。套接字(连接到状态事件或状态对象本身的一部分)可以通过重新整理对象来同步这两个状态,但它似乎只是一个“属性更改”对象。

显然,这可以手动实施。但似乎序列化程序应该只能序列化一个属性,并在另一侧像贴片一样应用它。有谁知道这是否可行,还是我必须从头开始编写整个内容?

2 个答案:

答案 0 :(得分:4)

使用XmlSerializer(和protobuf-net,对于二进制等价,因为protobuf-net采用大多数XmlSerializer的模式),你可以通过一个方法来做到这一点:

public bool SouldSerializeFoo() {
    return fooIsDirty;
}
public string Foo {get;set;}
每个属性Foo

- 但您需要在自己的代码中手动维护“脏东西”(可能在set中)。很多工作;我过去做过一个不同的序列化器 - 说实话,它是一个真正的PITA。我还应该注意[XmlIgnore] public bool FooSpecified {get{...} set{...}}模式做同样的事情,但是对于你想要的,ShouldSerialize*更合适。

答案 1 :(得分:1)