2011-06-24 9 views
7

Mam klasy jak poniżej:Jak korzystać z XmlElementAttribute dla listy <T>?

public class Level 
{ 
    [XmlAttribute] 
    public string Guid { get; set; } 
} 

public class LevelList : List<Level> 
{ 
} 

public class Test 
{ 
    public LevelList CalLevelList { get; set; } 
} 

Korzystanie XmlSerializer, mam wyjścia tak:

 <CalLevelList> 
     <Level Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/> 
     <Level Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/> 
     </CalLevelList> 

Która jest technicznie poprawne. Jednak bez zmiany nazwy klas, chciałbym, aby wygląd wyjście tak:

 <Levels> 
     <L Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/> 
     <L Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/> 
     </Levels> 

wiem, można to zrobić za pomocą atrybutów, ale nie mogliśmy zorientować się, jak to zrobić. Kiedy dodać atrybut do klasy testowej tak:

public class Test 
    { 
     [XmlElement("Levels")] 
     public LevelList CalLevelList { get; set; } 
    } 

wyjście jest dość zaskakujące:

<Levels Guid="0de98dfb-ce06-433f-aeae-786b6d920aa6"/> 
<Levels Guid="0de98dfb-ce06-433f-aeae-786b6d920aa7"/> 

Oznacza to, że straciłem węzeł nadrzędny. Określona nazwa elementu staje się nazwą węzła. Dlaczego to? jak to działa?

Odpowiedz

14

Spróbuj tego:

public class Test 
{ 
    [XmlArray("Levels")] 
    [XmlArrayItem("L")] 
    public LevelList CalLevelList { get; set; } 
} 
+0

To działa. Dziękuję Ci bardzo! – newman

Powiązane problemy