假设我们有一个类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 { }
如何告诉XmlSerializer在序列化期间应忽略Derived2
的实例?
提前致谢!
答案 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