Obtener InvalidOperationException al deserializar en C #
Frecuentes
Visto 6,038 veces
-2
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?
1 Respuestas
3
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!
Primero, intente usar los atributos xml de System.Xml.Serialization (es decir, [XmlArray()])
Sería mejor que use FileStream en lugar de solo señalar URI
using(var filestream = new FileStream(//your uri, FIleMode.Open) { }
- 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 c# xml-serialization xml-deserialization invalidoperationexception or haz tu propia pregunta.
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. - Vladimir Perevalov
¿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? - Jon Skeet
¿Cómo generaste los datos XML? - GETah
Utilice Copiar/Pegar al publicar el código. Esto no compilará. - Henk Holterman