【问题标题】:Can protobuf-net be used to (de)serialize a list containing heterogeneous objects?protobuf-net 可以用来(反)序列化包含异构对象的列表吗?
【发布时间】:2011-05-22 09:12:10
【问题描述】:

是否可以(反)序列化异构对象列表?

【问题讨论】:

  • (请不要直接向个人提问,即使是我;p)

标签: .net protobuf-net


【解决方案1】:

List<object>不包含类型元数据的序列化格式提出了许多挑战...但与往常一样,存在技巧、陷阱和变通方法。

如果您的意思是在最外层,这里有几个选项围绕使用不同的标签(/字段编号)来指示消息类型。这在 API(例如,套接字对话)上很有用,在该 API 中可能随时会收到不同的消息。例如:How can I send multiple types of objects across Protobuf?

消息内部有些棘手;如果候选类型的列表很小,那么一个合理的解决方法如下所示:Protobuf attributes with a hierarchy of generic classes,即将每个预期类型视为一个专业化。

如果无法预测类型,则 v2 包含另一种解决方法,但包含比正常情况更多的元数据;见http://marcgravell.blogspot.com/2011/03/objects-graphs-and-all-that-jazz.html

【讨论】:

  • 好的,我明白了。我的第一个问题(可能会有更多问题)是否有可能在不实际接触基类型声明的情况下获得 ProtoInclude 效果。使用模型,可能?在 List 的情况下,我想在对象类型上使用 ProtoInclude,但显然我无法触及它的声明。
  • 如果它真的是List<object>并且不能改变,那么属性或不;目前描述的最后一种方法是唯一可行的选择。但是,我建议使用更适合序列化的 DTO 堆栈。重新包含:是的,它们可以通过 RuntimeTypeModel 添加
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 2012-04-26
相关资源
最近更新 更多