使用 Protobuf-Net 序列化未知子类型

Posted

技术标签:

【中文标题】使用 Protobuf-Net 序列化未知子类型【英文标题】:Serializing Unknown Sub-Types With Protobuf-Net 【发布时间】:2021-09-03 18:10:22 【问题描述】:

我目前正在尝试了解 protobuf-net,并找到了这篇关于能够序列化子类型的文章:How to Serialize Inherited Class with ProtoBuf-Net

实际上这表明基类型需要了解子类型:

[ProtoContract]
[ProtoInclude(1, typeof(SubType))]
class BaseType  ... 

class SubType : BaseType  ... 

问题:

    如果子类型未知怎么办? 可以为特定类型及其子类型自动配置 protobuf-net(不知道它们)吗? 第三,是否有类似 Fluent-API 的东西来配置 protobuf-net,而不是使用属性?

【问题讨论】:

【参考方案1】:
    是的,在 RuntimeTypeModel 下有一个完整的 API,包括在运行时而不是提前自动发现的回调

但是!

不,它不能与未知子类型一起使用,除非您的意思是:完全忽略子类型方面并将其视为已知类型。

【讨论】:

谢谢马克!请您为我指明正确的方向以获取有关这方面的一些文档吗? @Matthew 我不确定我是否曾经写过这方面的长篇文档。 API 和示例在那里。你有什么具体的尝试吗? 基本上,我正在构建一个自动配置所有子类型以进行序列化的东西,基于它将序列化这些子类型的所有公共实例属性的约定。我还向您发送了与此和记录类型有关的一些推文。 我已经分叉了 protobuf-net repo,所以我会做一些挖掘工作:-)

以上是关于使用 Protobuf-Net 序列化未知子类型的主要内容,如果未能解决你的问题,请参考以下文章

Protobuf-net 创建具有接口和抽象基类的类型模型

带有未知子类的 Protobuf-net 异常

使用 Protobuf-net,我得到一个关于 List<Subclassable> 的未知线路类型的异常

protobuf-net 中通用集合的序列化

使用 protobuf-net 序列化具有接口类型成员的类

使用 protobuf-net 反序列化 int& 类型