代码之家  ›  专栏  ›  技术社区  ›  dlras2

如何实现部分序列化?

  •  3
  • dlras2  · 技术社区  · 14 年前

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

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

    显然,这可以手动实现。但似乎序列化程序应该能够只序列化一个属性,并像在另一端应用补丁一样应用它。有人知道这是否可行,或者我必须从头开始写整个东西吗?

    2 回复  |  直到 13 年前
        1
  •  4
  •   Marc Gravell    14 年前

    XmlSerializer (和Protobuf网,对于二进制等价物,因为Protobuf网采用了 XML串行化器 的模式)您可以通过以下方法来实现:

    public bool SouldSerializeFoo() {
        return fooIsDirty;
    }
    public string Foo {get;set;}
    

    对于每个财产 Foo -但是您需要在自己的代码中手动维护“什么是脏的”(可能在 set )很多工作;我以前做过一个不同的序列化程序——老实说,这是一个真正的pita。我还应该注意到 [XmlIgnore] public bool FooSpecified {get{...} set{...}} 模式也有同样的作用,但是你想要什么, ShouldSerialize* 更合适。

        2
  •  1
  •   AJ.    13 年前