【发布时间】:2011-05-22 09:12:10
【问题描述】:
是否可以(反)序列化异构对象列表?
【问题讨论】:
-
(请不要直接向个人提问,即使是我;p)
标签: .net protobuf-net
是否可以(反)序列化异构对象列表?
【问题讨论】:
标签: .net protobuf-net
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
【讨论】:
List<object>并且不能改变,那么属性或不;目前描述的最后一种方法是唯一可行的选择。但是,我建议使用更适合序列化的 DTO 堆栈。重新包含:是的,它们可以通过 RuntimeTypeModel 添加