Obtener InvalidOperationException al deserializar en C #

Estoy usando un archivo .config basado en XML para almacenar algunos registros. mi XML está a continuación:

    <?xml version="1.0" encoding="utf-8"?>
    <Data_List xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Configuration>
        <Name>1st Week</Name>
        <Binary>
          <Field>field1</Field>
          <Version>1.0</Version>
        </Binary>
        <Binary>
          <Field>field2</Field>
          <Version>2.0</Version>
        </Binary>
    </Configuration>
      <Configuration>
        <Name>2nd Week</Name>
        <Binary>
          <Field>field1</Field>
          <Version>2.0</Version>
        </Binary>
        <Binary>
          <Field>field2</Field>
          <Version>4.0</Version>
        </Binary>
    </Configuration>
</Data_List>

Estoy usando el código C# de la siguiente manera:

public Binary
{
public String Field;
public String Version;
}

public Configuration
{
public String Name;
public List<Binary> Binary_List = new List<Binary>();

public GetfromXML()
{
List<Configuration> lists = new List<Configuration>();
TextReader reader = new StreamReader("Data_List.config");
XmlSerializer serializer = new XmlSerializer(typeof(List<Configuration>));
lists=(List<Configuration>)serializer.Deserialize(reader);
reader.Close();
}

Recibo una excepción que dice "Hay un error en el documento XML (2,2)". ¿Alguien puede ayudar por favor?

preguntado el 10 de marzo de 12 a las 09:03

Mire el mensaje y posiblemente las propiedades de excepción de InnerException, debería decir exactamente qué es lo que está mal. Además, por cómo se ve todo, no espera etiqueta. -

¿No da cualquier más información que eso, como cuál es el error? Le sugiero que elimine la serialización de la imagen: ¿puede cargar el documento como un documento XML para empezar? -

¿Cómo generaste los datos XML? -

Utilice Copiar/Pegar al publicar el código. Esto no compilará. -

1 Respuestas

Creo que el problema es que su modelo no está bien estructurado. En otras palabras, el serializador no sabe cómo leer su .xml.

Tu xml está mal. Cuando tienes List< T > habría un:

    <ArrayOfT></ArrayOfT>

en .XML. ¡Así es como debes hacerlo!

  1. Primero, intente usar los atributos xml de System.Xml.Serialization (es decir, [XmlArray()])

  2. Sería mejor que use FileStream en lugar de solo señalar URI

     using(var filestream = new FileStream(//your uri, FIleMode.Open)
    {
    }
    
  3. Utilice propiedades en lugar de variables. Porque más adelante es posible que desee enlazar.

Ejemplo de mi código de cómo logré resolver ese problema:

public ServiceMap Deserialize()
    {
        ServiceMap serviceMap = new ServiceMap();

        try
        {
            using (var fileStream = new FileStream(Settings.ServiceMapPath, FileMode.Open))
            {
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.IgnoreComments = true;

                using (XmlReader reader = XmlReader.Create(fileStream, settings))
                {
                    serviceMap = _serializer.Deserialize(reader) as ServiceMap;
                }
            }
        }
        catch (FileNotFoundException)
        {
            MessageBox.Show("File 'ServiceMap.xml' could not be found!");
        }

        return serviceMap;
    }

Mi clase ServiceMap:

    [XmlRoot("ServiceMap")]
public class ServiceMap
{
    [XmlArray("Nodes")]
    [XmlArrayItem("Node")]
    public List<Node> Nodes = new List<Node>();

    [XmlArray("Groups")]
    [XmlArrayItem("Group")]
    public List<Group> Groups = new List<Group>();

    [XmlArray("Categories")]
    [XmlArrayItem("Category")]
    public List<Category> Categories = new List<Category>();
}

EDIT: Mi XML:

<?xml version="1.0" encoding="utf-8"?>
<ServiceMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://   www.w3.org/2001/XMLSchema">
  <Nodes>
    <Node Name="Predrag">
  <Children>
    <Child>dijete1</Child>
    <Child>dijete2</Child>
    <Child>dijete3</Child>
    <Child>dijete4</Child>
  </Children>
  <Parents>
    <Parent>roditelj1</Parent>
    <Parent>roditelj2</Parent>
    <Parent>roditelj3</Parent>
  </Parents>
  <Group Name="Grupa" />
  <Category Name="Kategorija" />
</Node>
<Node Name="Tami">
  <Children>
    <Child>dijete1</Child>
    <Child>dijete2</Child>
  </Children>
  <Parents>
    <Parent>roditelj1</Parent>
  </Parents>
  <Group Name="Grupa2" />
  <Category Name="Kategorija2" />
</Node>

respondido 10 mar '12, 10:03

¿Puede proporcionar el archivo XML que está utilizando? Todavía no puedo obtenerlo, ya que siento que el modelo está estructurado. - stack_pointer es EXTINCT

Claro, aquí está (en la publicación de arriba) :) - Bip

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.