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 línea de tiros ReadElementContentAsBase64
NotSupportedException
con el mensaje:"método ReadElementContentAsBase64 no es compatible con esta XmlReader"
método ReadElementContentAsBase64 no es compatible con esta XmlReader. Use la propiedad CanReadBinaryContent para averiguar si un lector lo implementa.
(he comprobado, y devuelve verdadero CanReadBinaryContent)
estoy usando el Microsoft .NET Framework 3.5 aplicación.
¿Qué podría causar esto?
Nota: Estoy intencionalmente mezclando DataContractSerializer con IXmlSerializable. Me doy cuenta de que el enfoque más común para DataContractSerializer es hacer de mi clase un [DataContract].
Editar: ahora estoy usando una solución:
Convert.FromBase64String(reader.ReadElementContentAsString())
embargo, me pregunto por qué la manera regular falla.
¿Resolvió eventualmente este problema? Tengo exactamente el mismo problema ('CanReadBinaryContent' es' true', pero sigue fallando), pero, además, no tengo acceso al serializador que realmente falla (incrusto un objeto que implementa 'IXmlSerializable' en' DataContract') – Christoph