IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

Serialiser et Deserialiser des Dictionary<TKey, TValue> avec Linq to XML.


Sujet :

Linq

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut Serialiser et Deserialiser des Dictionary<TKey, TValue> avec Linq to XML.
    Bonjour,

    M'ayant que récemment mis a 'LINQ to Xml', j'ai encore pas mal de petits problèmes pour maitriser la syntaxe de cette 'extension'. De plus, je ne sais pas si le terme de sérialisation est vraiment approprier, mais je n'ai rien trouver d'autres qui se rapproche autant de ce que je souhaite faire.

    Je possède un Dictionary<string, List<string>> que je souhaiterais transformer en fichier xml ressemblant a cela:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <Groups>
      <Group name="groupe1">
        <item>item1</item>
        <item>item2</item>
        <item>item3</item>
      </Group>
      <Group name="groupe2">
        <item>item4</item>
        <item>item5</item>
        <item>item6</item>
      </Group>
    </ChamberGroups>

    Chaque 'group' name correspondrait a la TKey de mon dictionnaire, et les 'item' seraient quant a eux le contenu de ma List<string>.

    Et je souhaiterais, dans un deuxième temps, pourvoir de-sérialiser ce fichier xml afin de le parser et ajouter chaque 'group' name en tant que TKey dans mon dictionnaire et prendre le contenu de celui-ci(items) pour peupler ma List<string>.

    Voici quelques exemple de ce que j'ai fait jusqu'à présent:
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var xml = new XDocument(
        new XDeclaration("1.0", "utf-8", "yes"),
        new XElement("Groups",
        from pair in Dictionary
        select new XElement("Group", 
            new XAttribute("name", pair.Key),
            new XElement("item", pair.Value))));

    Je me doute que cela doit être assez simple, mais je n'arrive vraiment pas a parcourir ma 'List' dans une requête LINQ pour ajouter tous ses éléments dans mon 'group', et encore moins a créer un Dictionnaire a partir d'un fichier XML. J'ai lu pas mal de doc et je continu a en lire mais je n'ai rien trouver qui puisse m'aider sur ce problème. Si quelqu'un peut m'orienter ou m'aider a compléter mon code je lui en serait grandement reconnaissant.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 97
    Points : 115
    Points
    115
    Par défaut
    Tu n'étais vraiment pas loin pourtant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var xml = new XDocument(
                    new XDeclaration("1.0", "utf-8", "yes"),
                    new XElement("Groups",
                    from pair in dictionary
                    select new XElement("Group",
                        new XAttribute("name", pair.Key),
                        from item in pair.Value
                        select new XElement("item", item))));

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 97
    Points : 115
    Points
    115
    Par défaut
    Et dans l'autre sens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dictionary<string, List<string>> dictionary = xml.Descendants("Group")
        .ToDictionary(e => e.Attribute("name").Value, e => e.Descendants("item").Select(i => i.Value).ToList());

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Ah je savais que j'y étais presque !! En tout cas merci, je m'en vais tester tout cela des maintenant.

    [EDIT] Tout marche parfaitement, par contre j'ai fait une erreur dans mes explications. Mon Dictionnaire est de type <string, Groups>. Groups étant une classe qui possède une List<string>. Du coup j'ai reussi a transformer le code pour la sérialisation(car je comprends), par contre pour la de-sérialisation je ne sais vraiment pas accéder aux membres d'une classe par le biais de ta méthode.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Desole pour ce repost mais je n'arrivais plus a editer mon ancien post. Bref, voici juste une petite precision de ma classe et dictionnaire:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dictionary<string, Groups>
     
     public class Groups : TreeViewItem
        {
            public List<string> items;
        }

    C'est dans cette List que j'aimerais rediriger tous les items de mon parsing XML.

    Cordialement, Ephismen.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 97
    Points : 115
    Points
    115
    Par défaut
    Ca ne change pas grand chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dictionary<string, Groups> dictionary = xml.Descendants("Group")
        .ToDictionary(e => e.Attribute("name").Value, e => new Groups { items = e.Descendants("item").Select(i => i.Value).ToList() });

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup pour ton aide, je vais non seulement me replonger dans LINQ mais aussi dans les lambda expressions. Car je sais les utilisés dans des events ou appels aux WebService, mais pas du tout dans ce genre de cas.

    Merci, Ephismen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/12/2012, 21h24
  2. Réponses: 3
    Dernier message: 09/06/2009, 10h08
  3. Alternative au Dictionnaire<TKey,TValue>
    Par Cartman.inc dans le forum C#
    Réponses: 2
    Dernier message: 14/01/2009, 16h27
  4. Réponses: 4
    Dernier message: 23/01/2007, 16h23
  5. Réponses: 4
    Dernier message: 20/05/2005, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo