gpt4 book ai didi

c# - 如何实现部分序列化?

转载 作者:行者123 更新时间:2023-11-30 15:10:41 24 4
gpt4 key购买 nike

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

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

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

最佳答案

使用 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* 更合适。

关于c# - 如何实现部分序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3038353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com