У меня есть класс, который я больше не хочу использовать. Я создал базовый класс и сделал свой устаревший класс дочерним по отношению к новому базовому классу.
В отношении данных единственное различие между этими двумя классами заключается в одном свойстве DataMember.
У меня есть класс, у которого есть свойство, которое ссылается на производный класс в свойстве (также DataMember). Я заменил этот тип базовым типом.
При десериализации я получаю сообщение об ошибке Десериализованный объект с идентификатором ссылки 'iXX' не найден в потоке
Если я переместу DataMember из моего производного класса в базовый класс. Исключение исчезает.
Я знаю, что не могу изменить DataContract. Я надеялся создать новый класс и позволить другому устаревшему классу со временем отвалиться.
Могу ли я сделать это? Почему я получаю это исключение?
* EDIT:
Похоже, что элемент xml имеет атрибут type, когда задействовано наследование. Я предполагаю, что именно поэтому десериализация терпит неудачу.
** EDIT:
Сериализуйте с этим:
[DataContract(IsReference = true)]
public class DerivedType
{
[DataMember]
public Dictionary<object,object> DataMemberThatIDoNotNeed { get; set; }
}
[DataContract(IsReference = true)]
public class Class1
{
[DataMember]
//Previously was DerivedType before BaseType was introduced
public DerivedType MyBaseType { get; set; }
}
Затем десериализовать с помощью:
[DataContract(IsReference = true)]
[KnownType(typeof(DerivedType))]
public class BaseType
{
}
[DataContract(IsReference = true)]
public class DerivedType : BaseType
{
[DataMember]
public Dictionary<object,object> DataMemberThatIDoNotNeed { get; set; }
}
[DataContract(IsReference = true)]
public class Class1
{
[DataMember]
//Previously was DerivedType before BaseType was introduced
public BaseType MyBaseType { get; set; }
}