2011-01-08 5 views
1

Wenn ich versuche, ein Klassenelement vom Typ Test zu serialisieren, gibt es ein xml mit root-Element als "testing", das mit XmlRoot gesetzt wird.Serialisierungsklasse mit XmlRoot, Fehler bei Verwendung in Liste

Wenn ich jedoch versuche, ein Element der Klasse Elems zu serialisieren, wird das Testelement mit dem Stammelement "Test" anstelle von "Testen" serialisiert. Diese

[XmlRoot("testing")] 
public class Test 
{ 
} 

public class Elems 
{ 
    public List<Test> how = new List<Test>(); 

    public Elems() 
    { 
     how.Add(new Test()); 
     how.Add(new Test()); 
     how.Add(new Test()); 
    } 
} 

die Ausgabe, wenn Elems serialisiert,

<Elems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x 
mlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <how> 
    <Test /> 
    <Test /> 
    <Test /> 
    </how> 
</Elems> 

stattdessen das ist, was ich brauche.

<Elems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x 
mlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <how> 
    <testing /> 
    <testing /> 
    <testing /> 
    </how> 
</Elems> 

Dank

+0

XmlRoot gilt nur, wenn das Objekt die Wurzel - das äußerste Objekt. –

+0

Gibt es eine andere Möglichkeit, bei der die Testklasse als "root" in der Liste serialisiert wird? – Rozuur

+0

Sie können [XmlElement] oder [XmlArrayItem] für das verwenden –

Antwort

3

wie diese versuchen:

public class Test { } 

public class Elems 
{ 
    public Elems() 
    { 
     How = new List<Test>(); 
     How.Add(new Test()); 
     How.Add(new Test()); 
     How.Add(new Test()); 
    } 

    [XmlArray("how")] 
    [XmlArrayItem("testing")] 
    public List<Test> How { get; set; } 
} 

class Program 
{ 
    static void Main() 
    { 
     var elems = new Elems(); 
     var serializer = new XmlSerializer(elems.GetType()); 
     serializer.Serialize(Console.Out, elems); 
    } 
} 
+0

Das funktioniert, aber warum funktioniert XmlRoot Dekoration nicht, wenn in List verwendet? – Rozuur

+0

@Rozuur, XmlRoot gilt nur für das Objekt, das Sie serialisieren, was in Ihrem Fall Elems ist. Alle anderen XmlRoot-Attribute für untergeordnete Eigenschaften werden ignoriert. So wurde es implementiert. –