テストクラスは次のとおりです。
[XmlRoot("Test")]
class Test : IXmlSerializable
{
public string Attr { get; set; }
// ... more properties here...
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
throw new NotImplementedException();
}
public void WriteXml(XmlWriter writer)
{
writer.WriteAttributeString("attr", Attr);
writer.WriteStartElement("InnerTest"); // <-- exception
// ... write inner stuff
writer.WriteEndElement();
}
}
WriteXml を呼び出すと、例外がスローされます。
Index was outside the bounds of the array.
at System.Xml.XmlTextWriter.WriteEndStartTag(Boolean empty)
at System.Xml.XmlTextWriter.AutoComplete(Token token)
at System.Xml.XmlTextWriter.WriteStartElement(String prefix, String localName, String ns)
at System.Xml.XmlWriter.WriteStartElement(String localName)
at Tests.Test.WriteXml(XmlWriter writer)
インターネット上の例では、このコードは問題を引き起こしません (例: http://www.codeproject.com/Articles/43237/How-to-Implement-IXmlSerializable-Correctly ) が、私にとっては機能しません。その理由は何ですか?
更新: 最終的に、クラスを次のようにシリアル化したいと思います。
<Test attr="..."><InnerTest>...</InnerTest></Test>