如何告诉System.Xml.Serialization.XmlSerializer只序列化基类?

时间:2012-04-12 15:35:52

标签: c# xmlserializer base-class

我有一个基类MyBase的对象数组。其中一些对象是派生类的实例,因此当我尝试使用System.Xml.Serialization.XmlSerializer序列化此数组时,它会因为派生类的抱怨而失败: System.InvalidOperationException:不期望DerivedClass类型。使用XmlInclude或SoapInclude属性指定静态未知的类型。

我不想序列化派生类,我绝对不希望将[XmlIgnore()]放在派生类中(或基类中的[XmlInclude()]),就此而言! / p>

有没有办法告诉XmlSerializer 仅为此类成员序列化基础

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

1 个答案:

答案 0 :(得分:1)

您可以对项目集合执行Linq查询,过滤类型:

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