0

假设我们有一个类Root,其中包含一个抽象类的数组,该数组BaseClass由 2 个派生类实现,Derived1并且Derived2

[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 { }

我如何告诉 XmlSerializerDerived2在序列化过程中应该忽略 的实例?

提前致谢!

4

1 回答 1

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

于 2012-10-26T10:09:47.537 回答