2009-11-25 3 views
2

I désérialiser XML en classes:XML deserialize dans des classes qui étend la collecte

Mon fichier XML:

<?xml version="1.0" encoding="utf-8" ?> 
<ToolBarConfiguration> 
    <ToolBars> 
    <ToolBarSet id="1" buttonsCounter="4" width="252"> 
     <ToolBarItems> 
     <ToolBarItem id="1" Command="Command11" Icon="pic11" Icon2="pic11" Enabled="true" Visible="true" Type="Button"/> 
     <ToolBarItem id="2" Command="Command12" Icon="pic12" Enabled="true" Visible="true" Type="Button"/> 
     <ToolBarItem id="3" Command="Command13" Icon="pic13" Enabled="true" Visible="true" Type="Button"/> 
     <ToolBarItem id="4" Command="Command14" Icon="pic14" Enabled="false" Visible="true" Type="Button"/> 
     </ToolBarItems> 
    </ToolBarSet> 
    <ToolBarSet id="2" buttonsCounter="2" width="170"> 
     <ToolBarItems> 
     <ToolBarItem id="1" Command="Command21" Icon="pic11" Enabled="true" Visible="true" Type="ButtonWithSelector"/> 
     <ToolBarItem id="2" Command="Command22" Icon="pic22" Enabled="true" Visible="true" Type="Button"/> 
     </ToolBarItems> 
    </ToolBarSet> 
    </ToolBars> 
</ToolBarConfiguration> 

Ma structure de classe:

[XmlRoot("ToolBarConfiguration")] 
    public class ToolBars 
    { 
     [XmlArray("ToolBars")] 
     [XmlArrayItem("ToolBarSet", typeof(Toolbar))] 
     public List<Toolbar> Toolbars 
     { 
      get { return toolbars; } 
      set { toolbars = value; } 
     } 
     List<Toolbar> toolbars = new List<Toolbar>(); 
    } 
public class Toolbar 
    { 
     [XmlAttribute("id")] 
     public int Id { get; set; } 
     [XmlAttribute("buttonsCounter")] 
     public int ButtonsCounter { get; set; } 
     [XmlAttribute("width")] 
     public int Width { get; set; } 

     [XmlArray("ToolBarItems")] 
     [XmlArrayItem("ToolBarItem", typeof(ToolbarItem))] 
     public List<ToolbarItem> ToolbarItems 
     { 
      get { return toolbarItems; } 
      set { toolbarItems = value; } 
     } 
     List<ToolbarItem> toolbarItems = new List<ToolbarItem>(); 

    } 

public class ToolbarItem 
    { 
     [XmlAttribute("Command")] 
     public string Command { get; set; } 

     [XmlAttribute("id")] 
     public int Id { get; set; } 

     [XmlAttribute("Icon")] 
     public string Icon { get; set; } 

     [XmlAttribute("Icon2")] 
     public string Icon2 { get; set; } 

     [XmlAttribute("Visible")] 
     public bool Visible { get; set; } 

     [XmlAttribute("Enabled")] 
     public bool Enabled { get; set; } 

     [XmlAttribute("Type")] 
     public ToolbarItemType ItemType { get; set; } 

    } 

Je veux rendre les classes plus élégant,
est-ce une bonne idée de rendre la classe ToolBars étendre la liste?
Si oui, comment dois-je modifier les attributs xml et xml?

+0

que voulez-vous dire par _more elegant_? –

+0

Je n'aime pas la classe toolBar avec une seule propriété de collection de barre d'outils. peut-être vaut-il mieux étendre la collection? – samuel

Répondre

1

Quel mal fait-il? Personnellement, je le laisserais tel quel; il fait ce qu'il dit, et est simple à comprendre. Pour moi, c'est élégant. Vous pouvez également ajouter des propriétés au niveau supérieur plus tard (vous ne pouvez pas le faire si c'est lui-même une liste).