2009-06-26 5 views

Répondre

2

Est-ce que le nom de l'élément change vraiment par niveau? Sinon, vous pouvez utiliser un modèle de classe très simple et XmlSerializer. La mise en œuvre IXmlSerializable est ... difficile; et sujet aux erreurs. Évitez-le sauf si vous devez absolument l'utiliser.

Si les noms sont différents, mais rigides, je venais de courir par xsd:

xsd example.xml 
xsd example.xsd /classes 

Pour un XmlSerializer sans IXmlSerializable exemple (même nom à chaque niveau):

using System; 
using System.Collections.Generic; 
using System.Xml.Serialization; 

[XmlRoot("Foolist")] 
public class Record 
{ 
    public Record(string name) 
     : this() 
    { 
     Name = name; 
    } 
    public Record() { Children = new List<Record>(); } 
    [XmlAttribute("name")] 
    public string Name { get; set; } 

    [XmlElement("Child")] 
    public List<Record> Children { get; set; } 
} 

static class Program 
{ 
    static void Main() 
    { 
     Record root = new Record { 
      Children = { 
       new Record("A") { 
        Children = { 
         new Record("Child 1"), 
         new Record("Child 2"), 
        } 
       }, new Record("B"), 
       new Record("C") { 
        Children = { 
         new Record("Child 1") { 
          Children = { 
           new Record("Little 1") 
          } 
         } 
        } 
       }} 
      }; 
     var ser = new XmlSerializer(typeof(Record)); 
     ser.Serialize(Console.Out, root); 
    } 
} 
+0

Mais si Record hérite d'une autre classe que les membres que je ne veux pas sérialiser? – Agzam

+0

Puis marquez les membres enfants comme [XmlIgnore]; ou passer à DataContractSerializer et wave bye pour contrôler la mise en page; ou avoir un ensemble de classes "DTO" séparé. Je m'attends à ce que la route DTO est la meilleure option. –

+0

Je pense toujours à utiliser IXmlSerializable. le seul problème que j'ai compris xmlreader est «avant seulement» chose. Et je ne peux trouver aucun exemple de (dé) sérialisation non seulement un fichier XML plat, mais avec une certaine structure. – Agzam