Hier zu schreiben versucht, eine Testklasse:Ausnahme während IXmlSerializable.WriteXml wenn einen inneren Tag
[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();
}
}
Als ich WriteXml nenne, wird eine Ausnahme ausgelöst:
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)
In den Beispielen im Internet Dieser Code verursacht keine Probleme (zB http://www.codeproject.com/Articles/43237/How-to-Implement-IXmlSerializable-Correctly), aber für mich funktioniert es nicht. Was kann der Grund sein?
Update: Schließlich ich die Klasse möchte wie diese serialisiert werden:
<Test attr="..."><InnerTest>...</InnerTest></Test>
die Tat, ich rufe WriteXml direkt und offensichtlich, dass eine falsche Art und Weise war die Serialisierung zu testen. Vielen Dank! – Vlad