忽略.NET XmlSerializer的特定派生类

时间:2012-10-26 10:02:53

标签: c# c#-4.0 xml-serialization

假设我们有一个类Root,它包含一个抽象类BaseClass的数组,由2个派生类Derived1Derived2实现

[XmlRootAttribute("root")]
public class Root
{
  [XmlElement("derived1", typeof(Derived1))]
//[XmlElement("derived2", typeof(Derived2))]
  public BaseClass[];
}

public abstract class BaseClass { }

public class Derived1 : BaseClass { }

public class Derived2 : BaseClass { }

如何告诉XmlSerializer在序列化期间应忽略Derived2的实例?

提前致谢!

1 个答案:

答案 0 :(得分:3)

我错了,有:ShouldSerialize做了魔法MSDN
假设您的房产是“Obj”

public bool ShouldSerializeObj() {
      return Obj is Derived1;
   }

修改 如果你想要处理序列化,你可以像你说的那样实现IXmlSerializable接口

public class Derived1 : BaseClass, IXmlSerializable 
{ 
  public XmlSchema GetSchema() { return null; }

  public void ReadXml(System.Xml.XmlReader reader)
  {
    reader.MoveToContent();
    Name = reader.GetAttribute("Name");
    reader.ReadStartElement();
    if (!reader.IsEmptyElement)
    {
      YourProperty = reader.ReadElementString("YourElem");
      reader.ReadEndElement();
    }
  }

  public void WriteXml(System.Xml.XmlWriter writer)
  {
    witer.WriteAttributeString("Name", Name);
    writer.WriteElementString("YourElem", "ThisIsMyContent");
  }
}

这样您就可以处理序列化了。
注意:GetSchema()应该返回null