0

2つの派生クラスによって実装されるRoot抽象クラスの配列を含むクラスがあり、BaseClassDerived1Derived2

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

Derived2シリアル化中にのインスタンスを無視する必要があることをXmlSerializerに伝えるにはどうすればよいですか?

前もって感謝します!

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 に答える