2009-03-23 5 views
7

Nel tentativo di deserializzare un file XML con XmlSerializer, ma Im ottenendo questa eccezione:eccezione quando il tentativo di deserializzare un file xml

"C'è un errore nel documento XML (1, 2)" L'InnerException è: "<Mymessage xmlns='http://MyMessages/'> non era previsto."

Qual è la prima riga del file XML. la mia ipotesi è che abbia qualcosa a che fare con gli xmlns.

Ho provato a chiedere a Google, e poi ha cercato di aggiungere la seguente riga al mio codice

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

Ma ho ancora ottenere la stessa eccezione.

+0

potrebbe condividere la parte rilevante del file xml per favore? –

+0

Questa è una vecchia domanda, ma è importante sapere che lo stesso errore può essere generato a causa di una classe mancante di un attributo Serializable. –

risposta

8

Nel costruttore del XmlSerializer avevo bisogno di specificare un namespace di default, dopo aver fatto che tutto ha funzionato bene

+5

Puoi dare un esempio di codice di come hai risolto questo? Penso di avere lo stesso problema, ma la specifica dello spazio dei nomi predefinito non fa la differenza. – Jon

3

Fornire il codice file XML completo per comprendere meglio il problema.

mettere anche questo come la prima riga nel file xml e vedere se questo risolve il problema

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

Consiglio vivamente di utilizzare "utf-8" anziché iso-8859-1 per tutto il lavoro di servizio Web interoperabile! –

1

Suona come si dispone di un file XML BORKED. Un modo facile per scoprire:

  • si provi a caricarlo in un visualizzatore XML
  • o semplicemente assicurarsi che ha un estensione .xml e di carico in VS o IE
  • o eseguire su di esso xsd.exe

Se si lamentano, quindi l'xml è certamente corrotto. Se funzionano correttamente e visualizzano i dati, probabilmente gli attributi di serializzazione sono errati. Provare a utilizzare xsd.exe con l'opzione "/ classi" per vedere cosa sarebbe fare con esso ...

2

seguito alla risposta di CruelIO, ho risolto l'errore con l'aggiunta di:

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

alla classe che stavo cercando di deserializzare. per esempio: il codice di serializzazione era:

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

e la mia classe si presentava così:

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