c# - example - Usando XmlSerializer con una matriz en el elemento raíz
xmlserializer c# example (1)
Tengo un documento XML similar al siguiente:
<scan_details>
<object name="C:/Users/MyUser/Documents/Target1.doc">
...
</object>
<object name="C:/Users/MyUser/Documents/Target2.doc">
...
</object>
...
</scan_details>
Espero utilizar los atributos System.Xml.Serialization
para simplificar la deserialización XML. El problema que tengo es que no puedo averiguar cómo especificar que el nodo raíz contiene una matriz.
He intentado crear las siguientes clases:
[XmlRoot("scan_details")]
public class ScanDetails
{
[XmlArray("object")]
public ScanDetail[] Items { get; set; }
}
public class ScanDetail
{
[XmlAttribute("name")]
public string Filename { get; set; }
}
Sin embargo, cuando deserializo el XML en el objeto ScanDetails
la matriz de Items
permanece null
.
¿Cómo deserializo una matriz en un nodo raíz?
Debería usar [XmlElement]
, y no [XmlArray]
para decorar la propiedad Items: ya es una matriz, y solo desea establecer el nombre del elemento.
public class _12924221
{
[XmlRoot("scan_details")]
public class ScanDetails
{
[XmlElement("object")]
public ScanDetail[] Items { get; set; }
}
public class ScanDetail
{
[XmlAttribute("name")]
public string Filename { get; set; }
}
const string XML = @"<scan_details>
<object name=""C:/Users/MyUser/Documents/Target1.doc"">
</object>
<object name=""C:/Users/MyUser/Documents/Target2.doc"">
</object>
</scan_details> ";
public static void Test()
{
XmlSerializer xs = new XmlSerializer(typeof(ScanDetails));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(XML));
var obj = xs.Deserialize(ms) as ScanDetails;
foreach (var sd in obj.Items)
{
Console.WriteLine(sd.Filename);
}
}
}