У меня был такой класс:
[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
}
Проблема в обратной совместимости.Возможно ли, что старые сериализованные элементы были десериализованы правильно?Каковы лучшие практики / шаблоны миграции контрактов данных с обратной совместимостью?