Как сказать System.Xml.Serialization.XmlSerializer только сериализовать базовый класс?

У меня есть массив объектов моего базового класса MyBase, Некоторые из этих объектов являются экземплярами производных классов, поэтому, когда я пытаюсь сериализовать этот массив, используя System.Xml.Serialization.XmlSerializer это терпит неудачу с жалобами на производные классы: System.InvalidOperationException: тип DerivedClass не ожидался. Используйте атрибут XmlInclude или SoapInclude, чтобы указать типы, которые не известны статически.

Я не хочу сериализовать производные классы, и я определенно не хочу помещать [XmlIgnore()] в производных классах (или [XmlInclude()] в базовом классе, в этом отношении)!

Есть ли способ сказать XmlSerializer только сериализовать базу для такого члена, как этот?

[XmlElement("Items")]
public MyBase[] Items
{
    get
    {
        return items.ToArray();
    }
    set 
    {
        items = new HashSet<MyBase>(value);
    }
}

1 ответ

Вы можете выполнить запрос Linq для коллекции элементов с фильтрацией по типу:

[XmlElement("Items")]
public MyBase[] Items
{
    get
    {
        return items.Where(item => item.GetType() == typeof(MyBase)).ToArray();
    }
    set 
    {
        items = new HashSet<MyBase>(value);
    }
}
Другие вопросы по тегам