using System.IO;
using System.Runtime.Serialization;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
namespace XmlTest
{
class TestClass : IXmlSerializable
{
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
var data = new byte[3];
reader.ReadStartElement();
reader.ReadElementContentAsBase64(data, 0, data.Length);
}
public void WriteXml(XmlWriter writer)
{
var data = new byte[] { 1, 2, 3 };
writer.WriteBase64(data, 0, data.Length);
}
public static void Main()
{
var serializer = new DataContractSerializer(typeof(TestClass));
var stringWriter = new StringWriter();
using (var writer = XmlWriter.Create(stringWriter))
{
serializer.WriteObject(writer, new TestClass());
}
var stringReader = new StringReader(stringWriter.ToString());
using (var reader = XmlReader.Create(stringReader))
{
serializer.ReadObject(reader, true);
}
}
}
}
Die ReadElementContentAsBase64
Linie wirft NotSupportedException
mit message:"ReadElementContentAsBase64 Verfahren ist nicht in diesem XmlReader unterstützt"
ReadElementContentAsBase64 Verfahren ist nicht in diesem XmlReader unterstützt. Verwenden Sie die CanReadBinaryContent-Eigenschaft, um herauszufinden, ob ein Leser sie implementiert.
(I geprüft und CanReadBinaryContent liefert true)
Ich bin mit dem Microsoft .NET 3.5 Framework-Implementierung.
Was könnte die Ursache sein?
Hinweis: Ich bin absichtlich DataContractSerializer mit IXmlSerializable mischen. Mir ist klar, dass der häufigere Ansatz für DataContractSerializer ist meine Klasse eines [Datacontract] zu machen.
Edit: Ich bin jetzt eine Abhilfe verwenden:
Convert.FromBase64String(reader.ReadElementContentAsString())
Dennoch frage ich mich, warum die normale Art und Weise versagt.
Haben Sie dieses Problem schließlich gelöst? Ich habe genau das gleiche Problem ('CanReadBinaryContent' ist' true', aber es immer noch nicht), sondern zusätzlich, ich habe keinen Zugriff auf die Serializer, die tatsächlich abstürzt (I einzubetten ein Objekt, das 'IXmlSerializable' in einem' DataContract' implementiert). – Christoph