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

标签 c# xmlserializer base-class

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

我不想序列化派生类,我绝对不想在派生类中放入[XmlIgnore()](或者[XmlInclude()] 在基类中,就此而言)!

有没有办法告诉 XmlSerializer 只为像这个这样的成员序列化基数

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

最佳答案

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

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

关于c# - 如何告诉 System.Xml.Serialization.XmlSerializer 只序列化基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10126927/

相关文章:

c++ - 在派生类 C++ 上访问方法的最佳方式

c# - 对c#中的继承感到困惑

c# - Azure Pipeline (DotNetCoreCLI@2) 将 DLL 包含到 nuget 中

c# - 从池中获取连接之前超时时间已过

c# - 使用 JavaScript 检索文本框

wcf - 强制 WCF 在反序列化期间使用现有缓冲区?

c# - 为什么 CosmosDB 只保存公共(public)成员?

c# - XmlSerializer.Deserialize - 忽略不必要的元素?

C# 如何反序列化嵌入在文本中的 xml 标记?

c++ - 为容器生成成员类型