包含具有向后兼容性的泛型的类的序列化

时间:2009-04-16 11:34:09

标签: c# serialization backwards-compatibility

我正在尝试找出在我的程序中处理序列化的最佳方法。

我想序列化私有字段(因此XML序列化程序是不可选的) 我想序列化像Bindinglist这样的泛型类型(SoapSerializer是没有选项的) 我还想提供某种程度的支持,以便能够从我的程序的早期版本反序列化对象。

所以我认为剩下的就是BinarySerializer,并实现ISerializable接口以应对前向兼容性。

这是对的吗?

注意: 我必须说我找到了这个项目。 然而,该项目似乎已经死了,我无法让它工作(文件丢失错误) http://sourceforge.net/project/showfiles.php?group_id=196509

2 个答案:

答案 0 :(得分:1)

使用BinaryFormatter,您可以使用[OptionalField],但这仍然是very brittle

protobuf-net怎么样?是否所有这些,并没有与BinaryFormatter相关的版本控制问题。由于它基于Google的“协议缓冲区”格式,因此设计是版本容忍和可扩展的(披露:我是作者,所以我可能有偏见)。

或者,DataContractSerializer支持字段序列化;只需对您的字段而不是属性设置[DataMember](需要.NET 3.0)。

答案 1 :(得分:0)

是的,您需要实现ISerializable。

关键点如下

  • 实现GetObjectData(SerializationInfo info,StreamingContext context)。在这里,您需要将密钥对添加到info对象中。
  • 实现序列化构造函数MyClass(SerializationInfo info,StreamingContext context)。在这里,您需要从info对象中获取值。