protobuf.net 和条件序列化

Posted

技术标签:

【中文标题】protobuf.net 和条件序列化【英文标题】:protobuf.net & conditional serialization 【发布时间】:2012-04-17 11:15:46 【问题描述】:

我们正在使用 protobuf.net 来序列化移动设备和后端服务之间的类,但我们现在需要根据用户的“上下文”调整发送回客户端的内容。

我们通常会通过实现 ISerializable 接口并查看上下文值来决定要序列化的内容来做到这一点。类似地,在构造函数中,我们将反序列化提供的值。

但是对于 protobuf.net,ISerializable 似乎没有实现/支持(我知道为什么),所以我们通过采用“ShouldSerialize*”和“OnSerializing”方法解决了这个问题。然而,这确实意味着我们最终不得不将 StreamingContext 存储在每个感觉不正确的类中。我们可能会将其粘贴到全局中,但这也感觉不对。

有没有更好的方法来实现我们想要的,例如仅使用 protobuf.net 格式进行序列化,但序列化受外部提供的上下文影响?

【问题讨论】:

【参考方案1】:

这是一个很好的问题。当前支持的模式(ShouldSerialize* 等)完全从 BCL 中“按原样”借用,因此没有上下文 - 但是没有理由不能像回调一样支持参数 - 实际上,对于它支持的回调几乎任何用法(有/无上下文等) - 所以我想不出一个很好的理由不在这里支持它们。

你说得对,目前不支持它,但它可能是 - 让我知道这会很有用。

【讨论】:

对我们来说这将非常有用。我们使用 protobuf 将数据从服务器传输到移动设备,因此每个字节都很重要。传统的 ISerializable 方法从功能的角度为我们提供了我们想要的东西,但是由于我们没有使用 protobuf,我们获得的额外大小使其无法启动。

以上是关于protobuf.net 和条件序列化的主要内容,如果未能解决你的问题,请参考以下文章

Protobuf .NET 后反序列化处理程序

列表的 Protobuf.net 对象图序列化

使用 DataContract 属性时 ProtoBuf.NET 未序列化

如何判断 protobuf.net 中的反序列化是不是失败?

使用 protobuf.net 序列化图形时出现问题

使用 Protobuf .net 反序列化单个结构字段