2012-05-24 57 views
6

Tengo algunos archivos xml y estoy tratando de deserializar como se muestra a continuación en el código dado.Error en el documento XML (2,2)

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

Aquí localice el archivo en rutaArchivo no contiene las siguientes líneas

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

y es por eso que estoy recibiendo el error. ¿Puede ayudarme a agregar el tiempo de ejecución de estas líneas antes de deserializar la secuencia del archivo dado?

error se da a continuación:

System.InvalidOperationException: Hay un error en el documento XML (2, 2). ---> System.InvalidOperationException: era no esperado. en Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadermessageType. Read161_message() --- Final de seguimiento de pila de excepción --- en System.Xml.Serialization.XmlSerializer.Deserialize (XmlReader xmlReader, Cadena encodingStyle, XmlDeserializationEvents eventos) en System.Xml.Serialization.XmlSerializer.Deserialize (TextReader textReader) en CCR2BB.frmMain.BWConvertProcess_DoWork()

+0

¿Quiere decir que no es un archivo XML válido? ¿Cómo * comienza *? –

+0

¿** ** contiene esas líneas? Además, ¿dónde está el resto del archivo XML?Además, ¿cuál es el error? – Ashe

+0

El error aparece a continuación: System.InvalidOperationException: hay un error en el documento XML (2, 2). ---> System.InvalidOperationException: no se esperaba. en Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadermessageType.Read161_message() --- Final de seguimiento de pila de excepción --- en System.Xml.Serialization.XmlSerializer.Deserialize (XmlReader xmlReader, Cadena encodingStyle, XmlDeserializationEvents eventos) en System.Xml.Serialization.XmlSerializer.Deserialize (TextReader textReader) en CCR2BB.frmMain.BWConvertProcess_DoWork() –

Respuesta

12

Tendrá que consultar la excepción base para averiguar el problema. La excepción capturada probablemente contiene 4 o más excepciones internas.

Ejem:

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

La solución en otra pregunta era:

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

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

mayo ya sea que sea un enfoque para su problema. Como MSDN no funciona para mi red, no puedo proporcionar más documentación para XmlRootAttribute.

+1

Me gustaría dar un voto positivo a la respuesta original, si tiene una referencia que podría agregar a esta respuesta sería genial. – btlog

0

De dónde sacaste la clase 'messageType'?

Si ha creado xsd para su xml usando xsd.exe y luego usando xsd ha creado esta clase.

Luego su proyecto tendrá dos archivos que contienen esta clase.

  • Uno de los archivos es designer.cs que contiene esta clase que se deriva de DataSet clase
  • Un archivo es simplemente un archivo .cs, que tiene una clase parcial.
  • Cuando utiliza esta clase mientras deserializa, se referirá a la clase de designer.cs que se deriva de DataSet.
  • Pero si elimina designer.cs de su proyecto, su código se referirá a la clase parcial del archivo .cs.

Al eliminar este archivo designer.cs, que tenía la clase derivada de DataSet, pude resolver este error.

Cuestiones relacionadas