Как сказать 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);
}
}