我曾经上过这样的课程:
[DataContract(Namespace = "blah")]
public class Item
{
[DataMember(Order = 0)]
public int Index { get; set; }
[DataMember(Order = 1)]
public Uri ItemSource { get; set; }
[DataMember(Order = 2)]
public Uri ErrorSource { get; set; }
}
我有很多序列化的副本(在文件中)(包括一些在生产环境中的文件), 现在我有一个任务是将这个类更改为以下内容:
[DataContract(Namespace = "blah")]
public class Item
{
[DataMember(Order = 0)]
public int Index { get; set; }
[DataMember(Order = 1)]
public ItemSourcesCollection Sources { get; set; }
}
其中ItemSourcesCollection是
[CollectionDataContract(ItemName = "ItemSourceItem", Namespace = "blah")]
public class ItemSourcesCollection : List<ItemSource> {}
ItemSource是指
[DataContract]
public class ItemSource
{
[DataMember]
public Uri SourcePath { get; set; }
[DataMember]
public ItemSourceType Type { get; set; }
}
其中ItemSourceType是
[Serializable]
public enum ItemSourceType
{
Data,
Errors
}
问题在于向后兼容性。旧的序列化项目是否可以被正确地反序列化?迁移数据契约的最佳实践/模式是什么,以保持向后兼容性?