2009-10-26 7 views
18

Ich habe ein Array von Objekten, die ich als XML serialisieren möchte. Diese Objekte sind mit Anmerkungen versehen, um XML-Knotennamen festzulegen, aber ich habe mich gefragt, wie der Name des XML-Wurzelknotens festgelegt werden soll.Wie wird der Name des Stammknotens beim XmlSerializing eines Arrays festgelegt?

Der Code sieht wie folgt aus:

// 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(); 

Die Ausgabe sieht wie folgt aus:

<?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 zu Platz umbenannt wurde eine XmlElement Anmerkung verwenden, aber wie kann Ich setze den Namen des Wurzelknotens, um den 'ArrayOfPlace' Knoten umzubenennen?

Antwort

28

Try this:

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

Beachten Sie, dass es notwendig ist, den Serializer zur späteren Wiederverwendung zwischenzuspeichern, da sonst ein schwerwiegender Speicherverlust entsteht. Siehe [Speicherleck mit StreamReader und XmlSerializer] (https://stackoverflow.com/questions/23897145/memory-leak-using-streamreader-and-xmlserializer/) – dbc

0

Nur eine Lösung fand mich auch.

Es ist möglich, den Namen des Wurzelknotens beim Instanziieren von XmlSerializer festzulegen. Siehe unten.