У меня есть такой сценарий:
namespace MyApp.Animals
{
public class Dog : MyApp.Categories.Canine
...
Так что я пытаюсь сериализовать / десериализовать класс собаки. К сожалению, я не могу использовать атрибут [XmlInclude], потому что, добавляя его в родительский класс (MyApp.Categories.Canine), мне нужно добавить ссылку на сборку, в которой существует родительский класс (MyApp.Animals) .. однако дочерний класс уже ссылается на родительский класс из-за наследования ... поэтому у нас есть циклическая ссылка.
Есть ли лучший способ достижения этой цели? Я могу обойти это, вручную сериализовав / десериализовав свойства, существующие в родительском классе, и просто выполняя сериализацию для дочернего, но это не очень элегантно.
Надеясь на лучшие советы ...
ОБНОВЛЕНИЕ: Добавление к примеру в ответ на комментарий Джона ниже ...
У меня нет полного примера кода (код, с которым я работаю, массивный и сложный), но проблема в том, что некоторые из свойств, которые должны де / сериализироваться в / из xml, содержатся в родительском классе, который находится в другой сборке с дочерним классом.
Добавление атрибутов XmlElement к родительскому классу не работает, поскольку мы фактически выполняем де / сериализацию для дочернего класса, поэтому он не повторяется до родительского класса. И мы не можем сделать это на родителе, потому что мы не можем добавить ссылку на потомка (так как потомок уже ссылается на родителя), поэтому де / сериализатор не будет знать, на какого потомка действовать.
Чтобы добавить дополнительный уровень сложности, объект, с которым у меня возникла проблема, фактически де / сериализуется как часть большей сериализации с помощью следующего свойства родительского объекта:
[XmlElement("ShippingAddress")]
public Location ShippingAddress
{
get { return _shippingAddress; }
set { _shippingAddress = value; }
}
Проблема в том, что тип местоположения здесь является дочерним типом местоположения. Таким образом, де-сериализуются только свойства в дочернем типе ... все свойства в родительском типе (также называемом Location, но в пространстве имен difnet) не являются.
это делает это понятнее?