2012-05-24 36 views
6

Ho alcuni file xml e sto tentando di deserializzare come indicato di seguito nel codice specificato.Errore nel documento XML (2,2)

using (StreamReader srFileContent = new StreamReader(filePath)) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(messageType)); 
    messageType objMessage = (messageType)serializer.Deserialize(srFileContent); 
} 

Qui file di individuare in filePath non contiene le seguenti righe

<?xml version="1.0"?> 
<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

e questo è il motivo per cui sto ottenendo l'errore. Puoi aiutarmi come aggiungere il runtime di queste righe prima di deserializzare lo stream del file specificato.

errore è il seguente:

System.InvalidOperationException: C'è un errore nel documento XML (2, 2). ---> System.InvalidOperationException: era non previsto. a Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadermessageType. Read161_message() --- Fine dell'analisi dello stack eccezione interna --- in System.Xml.Serialization.XmlSerializer.Deserialize (XmlReader XmlReader, String encodingStyle, XmlDeserializationEvents eventi) a System.Xml.Serialization.XmlSerializer.Deserialize (TextReader TextReader) a CCR2BB.frmMain.BWConvertProcess_DoWork()

+0

Vuoi dire che non è un file XML valido? Come * inizia *? –

+0

** non ** contiene quelle linee? Inoltre, dov'è il resto del file XML?Inoltre, qual è l'errore !? – Ashe

+0

L'errore è riportato di seguito: System.InvalidOperationException: c'è un errore nel documento XML (2, 2). ---> System.InvalidOperationException: non era previsto. a Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadermessageType.Read161_message() --- Fine dell'analisi dello stack eccezione interna --- a System.Xml.Serialization.XmlSerializer.Deserialize (XmlReader XmlReader, String encodingStyle, XmlDeserializationEvents eventi) in System.Xml.Serialization.XmlSerializer.Deserialize (TextReader textReader) in CCR2BB.frmMain.BWConvertProcess_DoWork() –

risposta

12

Dovrete esaminare l'eccezione di base per scoprire il problema. L'eccezione rilevata probabilmente contiene 4 o più eccezioni interne.

EG:

try 
{ 
    ... 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.GetBaseException()); 
} 
3

La soluzione in un'altra domanda era:

XmlRootAttribute xRoot = new XmlRootAttribute(); 
xRoot.ElementName = "message"; 
// xRoot.Namespace = "http://www.cpandl.com"; 
xRoot.IsNullable = true; 

XmlSerializer xs = new XmlSerializer(typeof(messageType),xRoot); 

maggio sia questo è un approccio per il tuo problema. Poiché MSDN non è disponibile per la mia rete, non posso fornire ulteriore documentazione per XmlRootAttribute.

+1

Mi piacerebbe dare un upvote alla risposta originale, se si dispone di un riferimento che è possibile aggiungere a questa risposta sarebbe fantastico. – btlog

0

Da dove hai preso la classe 'messageType'?

Se hai creato xsd per il tuo xml utilizzando xsd.exe e quindi usando xsd hai creato questa classe.

Quindi il progetto avrà due file che contengono questa classe.

  • Uno del file è designer.cs che contiene questa classe che deriva dalla classe DataSet
  • Un file è semplicemente un file .cs, che ha una classe parziale.
  • Quando si utilizza questa classe durante la deserializzazione, farà riferimento alla classe da designer.cs che è derivata da DataSet.
  • Ma se si rimuove designer.cs dal progetto, il codice farà riferimento alla classe parziale dal file .cs.

Rimuovendo questo file designer.cs, che aveva la classe derivata da DataSet, sono riuscito a risolvere questo errore.

Problemi correlati