(Anexo a la respuesta de Steve Guidi)
Por lo que yo puedo ver que no hay aplicación de XmlReader
puede utilizar simplemente con XDocument
sin mover el Contenido XML a través de una tienda intermedia como una representación de cadena de XML y que admite todos los tipos que, por ejemplo, admite System.Xml.XmlNodeReader
.
El lector devuelto por XDocument.CreateReader
(que es un System.Xml.Linq.XNodeReader
, una clase interna) es una XmlReader
y funciona para la mayoría de documentos XML, pero no con los documentos que tienen elementos de datos binarios, ya que su aplicación does not support Base64 or BinHex data:
base 64 y Los datos BinHex no son compatibles. Si intenta recuperar este tipo de datos (por ejemplo, llamando al ReadElementContentAsBase64), el lector arrojará NotSupportedException.
Para este lector XDocument.CreateReader().CanReadBinaryContent
es false
en contraste con la System.Xml.XmlNodeReader
.
Por ejemplo este programa genera una excepción:
public class SomeTest
{
public byte[] BinaryTest { get; set; }
}
class Program
{
static void Main(string[] args)
{
XDocument document = new XDocument(
new XElement("SomeTest",
new XElement("BinaryTest", "VGVzdA==")));
using (var reader = document.CreateReader())
{
var serializer = new XmlSerializer(typeof(SomeTest));
var someTest = serializer.Deserialize(reader) as SomeTest;
// NotSupportedException here (as inner exception)
}
}
}
Sin embargo, extraer el XML como string
y haciéndola pasar como TextReader
en el serializador funciona:
using (var reader = new StringReader(document.ToString()))
estaría interesado también si hay otra manera de deserializar un XDocument
que incluye datos binarios sin convertirlo primero en una cadena.
Ver también http://stackoverflow.com/q/7901558/11912 –