2009-10-26 11 views
18

Tengo una matriz de objetos que deseo serializar como XML. Estos objetos están anotados para establecer nombres de nodo XML, pero me preguntaba cómo configurar el nombre del nodo raíz XML.¿Cómo establecer el nombre del nodo raíz cuando XmlSerializar una matriz?

El código es el siguiente:

// create list of items 
List<ListItem> list = new List<ListItem>(); 
list.Add(new ListItem("A1", new Location(1, 2))); 
list.Add(new ListItem("A2", new Location(2, 3))); 
list.Add(new ListItem("A3", new Location(3, 4))); 
list.Add(new ListItem("A4<&xyz>", new Location())); 

// serialise 
XmlSerializer ser = new XmlSerializer(typeof(ListItem[])); 
FileStream os = new FileStream(@"d:\temp\seri.xml", FileMode.Create); 
ser.Serialize(os, list.ToArray()); 
os.Close(); 

La salida tiene el siguiente aspecto:

<?xml version="1.0"?> 
<ArrayOfPlace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Place> 
    <Placename>A1</Placename> 
    <Location> 
     <Lat>1</Lat> 
     <Long>2</Long> 
    </Location> 
    </Place> 
    <Place> 
    ... 

ListItem ha sido renombrado a Lugar utilizando un XmlElement anotación, pero ¿cómo puede ¿Establecí el nombre del nodo raíz para cambiar el nombre del nodo 'ArrayOfPlace'?

Respuesta

28

Prueba esto:

XmlSerializer ser = new XmlSerializer(
    typeof(ListItem[]), 
    new XmlRootAttribute("CustomRootName")); 
+0

Tenga en cuenta que es necesario guardar en la memoria caché el serializador para su reutilización más adelante, de lo contrario, tendrá una pérdida de memoria grave. Consulte [Fuga de memoria con StreamReader y XmlSerializer] (https://stackoverflow.com/questions/23897145/memory-leak-using-streamreader-and-xmlserializer/) – dbc

0

acaba de encontrar una solución a mí mismo también.

Es posible establecer el nombre del nodo raíz al crear instancias de XmlSerializer. Vea abajo.

XmlSerializer ser = new XmlSerializer(typeof(ListItem[]), new XmlRootAttribute("AllPlaces")); 
Cuestiones relacionadas