【问题标题】:Serialization of classes containing generics with backwards compatibility包含具有向后兼容性的泛型的类的序列化
【发布时间】:2009-04-16 11:34:08
【问题描述】:
我正在尝试找出在我的程序中处理序列化的最佳方法。
我想序列化私有字段(所以 XML 序列化器不是选项)
我想序列化像 Bindinglist 这样的泛型类型(SoapSerializer 不是选项)
我还想为能够从我的程序的以前版本反序列化对象提供一定程度的支持。
所以我想我剩下的就是 BinarySerializer,并实现 ISerializable 接口以应对前向兼容性。
这对吗?
注意:
我必须说我找到了这个项目。
但是该项目似乎已经死了,我无法让它工作(文件丢失错误)
http://sourceforge.net/project/showfiles.php?group_id=196509
【问题讨论】:
标签:
c#
serialization
backwards-compatibility
【解决方案1】:
使用BinaryFormatter,您可以使用[OptionalField],但这仍然是very brittle。
protobuf-net 怎么样?完成所有这些,并且没有与 BinaryFormatter 相关的版本控制问题。由于它基于 Google 的“protocol buffers”格式,它设计 具有版本容错性和可扩展性(披露:我是作者,所以我可能有偏见)。
另外,DataContractSerializer 支持字段序列化;只需针对您的字段而不是属性设置 [DataMember](需要 .NET 3.0)。
【解决方案2】:
是的,您需要实现 ISerializable。
重点如下
- 实现 GetObjectData(SerializationInfo 信息,StreamingContext 上下文)。在这里您需要将密钥对添加到 info 对象中。
- 实现序列化构造函数 MyClass(SerializationInfo info, StreamingContext context)。在这里,您需要从 info 对象中获取值。