2011-06-24 19 views
7

Tôi có một lớp học như thế này:Làm thế nào để sử dụng XmlElementAttribute cho Danh sách <T>?

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

public class LevelList : List<Level> 
{ 
} 

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

Sử dụng XmlSerializer, tôi nhận được đầu ra như thế này:

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

nào là đúng về mặt kỹ thuật. Tuy nhiên, mà không thay đổi tên lớp, tôi muốn làm cho kết quả trông giống như sau:

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

Tôi biết điều này có thể được thực hiện thông qua các thuộc tính nhưng không thể tìm ra cách. Khi tôi thêm một thuộc tính để class Test như thế này:

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

đầu ra khá ngạc nhiên:

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

Điều đó có nghĩa, tôi đã mất node cha. Tên phần tử mà tôi đã chỉ định sẽ trở thành tên nút. Tại sao lại thê nay? làm thế nào để làm cho nó hoạt động?

Trả lời

14

Hãy thử điều này:

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

Nó hoạt động. Cảm ơn nhiều! – newman

Các vấn đề liên quan