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

C# Discussion :

Désérialisation d'un fichier XML


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut Désérialisation d'un fichier XML
    Bonjour !

    Alors euh, je me suis lancée dans la désérialisation du fichier XML suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0"?>
    <Lapins>
      <Lapin>
        <Nom>LAP1</Nom>
        <Prenom>lapinou</Prenom>
      </Lapin>
      <Lapin>
        <Nom>LAP2</Nom>
        <Prenom>lapinou2</Prenom>
      </Lapin>
    </Lapins>
    Donc pour commencer, j'ai fait simple, j'ai modifié mon fichier XML en un truc super simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?xml version="1.0"?>
    <Lapin>
        <Nom>LAP1</Nom>
    <Lapin>
    et j'ai utilisé le code suivant qui fonctionne parfaitement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml.Serialization;
    using System.Configuration;
    using System.IO;
    using System.Xml;
     
    namespace Lapin.Service
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
     
               label1.Text = DeserializeObject(@"C:\Lapin\fichier.xml");
            }
     
            public string DeserializeObject(string filename)
            {
                XmlSerializer xs = new XmlSerializer(typeof(Lapin));
                using (StreamReader rd = new StreamReader(filename))
                {
                    Lapin L = new Lapin();
                    L = xs.Deserialize(rd) as Lapin;
                    return L.Nom;
                }
             }
          }
     
        public partial class Lapin
        {
            public string Nom;
        }
    }
    Seulement voilà, le-dit code ne fonctionne pas quand je change le fichier... (ce qui est logique, je le concoit tout a fait !!)

    Donc j'ai tenté d'utiliser une List<Lapin> mais euh, sans grand succès...

    Voilà ce que ça a donné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml.Serialization;
    using System.Configuration;
    using System.IO;
    using System.Xml;
     
    namespace Lapin.Service
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
     
               label1.Text = DeserializeObject(@"C:\Lapin\fichier.xml");
            }
     
            public string DeserializeObject(string filename)
            {
                 XmlSerializer xs = new XmlSerializer(typeof(List<Lapin>));
                using (StreamReader rd = new StreamReader(filename))
                {
                    List<Lapin> L ;
                    L = xs.Deserialize(rd) as List<Lapin>;
                    return ??????;// aussi une question, comment accéder aux valeurs de la liste du coup...?
                }
             }
          }
     
        public partial class Lapin
        {
            public string Nom;
        }
    }
    Donc si qqn pouvait m'éclairer, ça ne serait pas de refus =)

    (désolée pour la longueur de ce post...)

    Par avance, je vous remercie !

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Le problème est dans le XML.
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <Lapin>
        <Nom>LAP1</Nom>
    <Lapin>
    Tu ne fermes pas la balise <Lapin>

    Ca devrait être mieux avec
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0"?>
    <Lapin>
        <Nom>LAP1</Nom>
    </Lapin>

  3. #3
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    Oups pardon, c'est une erreur de recopie... Je l'avais bien fermée...

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Pour les collections c'est un peu particulier et le mieux c'est encore que tu lises cet article, et par la suite cet autre article. La sérialisation des collections y est abordée

  5. #5
    Membre confirmé Avatar de Bathou
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    Donc si j'ai bien compris ma lecture, il faudrait que dans ce code là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml.Serialization;
    using System.Configuration;
    using System.IO;
    using System.Xml;
     
    namespace Lapin.Service
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
     
               label1.Text = DeserializeObject(@"C:\Lapin\fichier.xml");
            }
     
            public string DeserializeObject(string filename)
            {
                 XmlSerializer xs = new XmlSerializer(typeof(List<Lapin>));
                using (StreamReader rd = new StreamReader(filename))
                {
                    List<Lapin> L ;
                    L = xs.Deserialize(rd) as List<Lapin>;
                    return ??????;// aussi une question, comment accéder aux valeurs de la liste du coup...?
                }
             }
          }
     
        public partial class Lapin
        {
            public string Nom;
        }
    }
    Je rajoute ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public List<Lapin> Lapins { get; set; }
    Mais par contre, je ne comprends pas ça:
    La valeur actuelle de la propriété est lue à l'aide de l'accesseur get

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par Bathou
    comment accéder aux valeurs de la liste du coup...?
    J'aurais tendance à te conseiller de lire le cours C# du site ou de faire une recherche sur la manipulation des collections en général, car c'est une base du langage qu'il faudrait acquérir

    Sinon pour te répondre mieux il faudrait d'abord que tu précises ce que tu veux faire exactement. Parce que je ne comprends pas le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    label1.Text = DeserializeObject(@"C:\Lapin\fichier.xml");
    Ca n'a absolument aucun sens si tu désérialises une collection, tu seras d'accord je pense. Le fait que la méthode DeserializeObject renvoie un objet de type string (i.e. le prototype de la méthode) est donc très étrange

    Et pour aller plus loin, si la structure de ton fichier XML est toujours le même qu'a début alors ton code ne fonctionnera pas. Tu as raté toute la partie sur les attributs qui servent à indiquer comment sérialiser (et donc désérialiser) l'information. A ce moment reprend le premier article sur la sérialisation, chapitre 2.

    Citation Envoyé par Bathou
    Mais par contre, je ne comprends pas ça: ...
    Cela veut juste dire que l'on va récupérer la collection via la propriété associée, tout simplement. Exactement ce qui est écrit donc ^^

Discussions similaires

  1. [Débutant] Désérialisation d'un fichier XML complexe
    Par Gugoo dans le forum VB.NET
    Réponses: 3
    Dernier message: 31/07/2014, 10h43
  2. Sérialisation et désérialisation de fichier XML en objet
    Par marooned dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 01/08/2012, 10h55
  3. [XStream] problème avec la désérialisation d'un fichier xml
    Par sidoumghar dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 25/11/2008, 12h23
  4. [Kylix] Composant IBM pour fichiers XML
    Par Mister Nono dans le forum EDI
    Réponses: 1
    Dernier message: 29/09/2002, 20h28
  5. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29

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