protobuf-net 可以用来(反)序列化包含异构对象的列表吗?
Posted
技术标签:
【中文标题】protobuf-net 可以用来(反)序列化包含异构对象的列表吗?【英文标题】:Can protobuf-net be used to (de)serialize a list containing heterogeneous objects? 【发布时间】:2011-05-22 09:12:10 【问题描述】:是否可以(反)序列化异构对象列表?
【问题讨论】:
(请不要直接向个人提问,即使是我;p) 【参考方案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 如果它真的是List<object>
并且不能改变,那么属性或不;目前描述的最后一种方法是唯一可行的选择。但是,我建议使用更适合序列化的 DTO 堆栈。重新包含:是的,它们可以通过 RuntimeTypeModel 添加以上是关于protobuf-net 可以用来(反)序列化包含异构对象的列表吗?的主要内容,如果未能解决你的问题,请参考以下文章
使用 protobuf-net,是不是可以在不分配内存的情况下反序列化消息?
需要在运行时确定哪些类型 protobuf-net 可以序列化/反序列化
是否可以在 Silverlight 中使用 protobuf-net 对私有属性进行(反)序列化?