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);
}
}
}
}
La ligne ReadElementContentAsBase64
lancers francs NotSupportedException
avec le message:"méthode ReadElementContentAsBase64 est pas pris en charge sur ce XmlReader"
méthode ReadElementContentAsBase64 est pas pris en charge sur ce XmlReader. Utilisez la propriété CanReadBinaryContent pour savoir si un lecteur l'implémente.
(j'ai vérifié, et CanReadBinaryContent retourne vrai)
J'utilise l'implémentation de Microsoft .NET Framework 3.5.
Qu'est-ce qui pourrait causer cela?
Remarque: Je mélange intentionnellement DataContractSerializer avec IXmlSerializable. Je réalise que l'approche la plus courante pour DataContractSerializer est de faire de ma classe un [DataContract].
Edit: J'utilise maintenant une solution de contournement:
Convert.FromBase64String(reader.ReadElementContentAsString())
Pourtant, je me demande pourquoi ne la façon régulière.
Avez-vous fini par résoudre ce problème? J'ai exactement le même problème ('CanReadBinaryContent' est' true', mais il échoue toujours), mais en plus, je n'ai pas accès au sérialiseur qui plante (j'inclus un objet qui implémente 'IXmlSerializable' dans un' DataContract'). – Christoph