c#
  • xml
  • exception
  • xml-serialization
  • 2009-03-23 31 views 7 likes 
    7

    Im tratando de deserializar un archivo XML con XmlSerializer, sin embargo im conseguir esta excepción:Excepción al intentar deserializar un archivo XML

    "Hay un error en el documento XML (1, 2)" El InnerException es: "<Mymessage xmlns='http://MyMessages/'> no se esperaba ".

    Cuál es la primera línea en el archivo XML. mi suposición es que tiene algo que ver con los xmlns.

    Intentamos preguntar Google, y luego trataron de añadir la siguiente línea al código

    [XmlRoot("MyMessage", Namespace="'http://MyMessages/")] 
    

    Pero sigo teniendo la misma excepción.

    +0

    podría compartir la parte correspondiente del archivo XML, por favor? –

    +0

    Esta es una pregunta antigua, pero es importante saber que se puede generar el mismo error debido a que una clase no tiene un atributo Serializable. –

    Respuesta

    8

    En el constructor de XmlSerializer que necesitaba para especificar un espacio de nombres predeterminado, después de hacer que todo funcionaba bien

    +5

    ¿Puedes dar un ejemplo de código de cómo resolviste esto? Creo que estoy teniendo el mismo problema, pero especificar el espacio de nombres predeterminado no hace la diferencia. – Jon

    3

    Proporcione el código de archivo XML completo para ayudar a comprender mejor el problema.

    también poner esto como la primera línea en el archivo XML y ver si esto resuelve el problema

    <?xml version="1.0" encoding="utf-8"?> 
    
    +0

    ¡Recomiendo utilizar "utf-8" en lugar de iso-8859-1 para todos los trabajos de servicio web interoperables! –

    1

    Parece que usted tiene un archivo XML borked. Una manera fácil de averiguar:

    • tratar de cargarlo en un visor de XML
    • o simplemente asegúrese de que tiene una extensión .xml y la carga en VS o IE
    • o correr sobre ella xsd.exe

    Si se quejan, entonces el xml está ciertamente dañado. Si funcionan bien y muestran sus datos, es probable que los atributos de serialización sean incorrectos. Trate de usar xsd.exe con el interruptor "/ clases" para ver lo que haría con él ...

    2

    en relación con la respuesta de CruelIO, que resuelve el error añadiendo:

    [XmlRoot("RenderResult", Namespace = "http://mynamespace.uri.org")] 
    

    a la clase que yo estaba tratando de deserializar. por ejemplo: el código de serialización era:

    RenderResult result; 
    using (var memoryStream = new MemoryStream(data)) 
    { 
        var xmlSerializer = new XmlSerializer(typeof(RenderResult)); 
        result = (RenderResult)xmlSerializer.Deserialize(memoryStream); 
    } 
    

    y mi clase era la siguiente:

    [XmlRoot("RenderResult", Namespace = "http://mynamespace.uri.org")] 
    public class RenderResult 
    { 
    } 
    
    Cuestiones relacionadas