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

Accès aux données Discussion :

[C#.net]Serialisation fichier xml


Sujet :

Accès aux données

  1. #1
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut [C#.net]Serialisation fichier xml
    bonsoir à tous,
    je pense que mon problème est simple mais je n'arrive pas à le résoudre.
    Voilà j'ai une classe Personnage qui contient des attributs privés (nom, prenom, age etc.)et une autre classe PersonnageCollection qui contient un seul attribut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public ArrayList personnages = new System.Collections.ArrayList();
    Je serialise cette dernière classe et la copie dans un fichier xml. Tout se passe bien mon fichier xml est créé seulement à l'intèrieur je n'ai que ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0" encoding="utf-8"?>
    <PersonnageCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <personnages>
        <Personnage />
      </personnages>
    </PersonnageCollection>
    mes attributs de la classe Personnage n'apparaissent pas car evidemment ils sont en privé. Mais si je les mets en public pas de probleme cela marche parfaitement. Mais j'aimerai autant éviter de les mettre en public d'autant plus que pour faire ma sérialisation j'ai utilisé ce tutoriel : http://www.supinfo-projects.com/fr/2...csharp%5Ffr/2/
    selon celui-ci, si mon tableau de Personnage dans PersonnageCollection est en public ça devrait fonctionner...
    merci d'avance !
    Antony, développeur .Net
    http://www.flecheinthepeche.fr/blog/

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 77
    Points : 73
    Points
    73
    Par défaut
    bonjour

    J'avais fait un exemple du site que tu as donné et ça marchait avec le tableau public mais pas avec privé. je ne sais pas pkoi ça pas marchait pour toi avec public si j'ai bien compris

    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
    47
    48
     
    using System.Collections;
    using System.IO;
    using System.Xml.Serialization;
    using System;
     
    public class Client
    {
         public string nom;
         public string prenom;
     
         public Client()
         {
                 this.nom = "Bob";
         }
         public Client(string nom, string prenom)
         {
                this.nom = nom;
                this.prenom = prenom;
         }
    }
    [Serializable] //Sérialisation de l’objet contactCollection
     
    public class contactCollection
    {          
         [XmlArrayItem(typeof(Client), ElementName = "contact")] //Ici               programme lira les noeuds contact, c’est ce qui correspond à un objet Contact
     
          public ArrayList contacts =new System.Collections.ArrayList(); //contacts est une liste de Contact
     
    public void addContact(Client c)
    {
         contacts.Add(c); // Ajoute un contact à la liste
    }
     
    public Client get(int n)
    {
           return (Client)contacts[n]; // Retourne le contact placé en n position   dans le tableau
    }
     
    public void ecriture() // Ecriture dans un XML
    {
             TextWriter flux = new StreamWriter("contact.xml");
             XmlSerializer fluxserialise = new XmlSerializer(typeof(contactCollection));
            fluxserialise.Serialize(flux, this);
            flux.Close();
     
    }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Client cli = new Client("AAAAAAA", "BBBBBBBB");
    Client cli1 = new Client("CCCCCCC", "DDDDDDD");
    Client cli2 = new Client("EEEEEEE", "FFFFFFF");
    contactCollection cl = new contactCollection();
    cl.addContact(cli);
    cl.addContact(cli1);
    cl.addContact(cli2);
    cl.ecriture();
    et ç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
     
    <?xml version="1.0" encoding="utf-8"?>
    <contactCollection xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <contacts>
        <contact>
          <nom>AAAAAAA</nom>
          <prenom>BBBBBBBB</prenom>
        </contact>
        <contact>
          <nom>CCCCCCC</nom>
          <prenom>DDDDDDD</prenom>
        </contact>
        <contact>
          <nom>EEEEEEE</nom>
          <prenom>FFFFFFF</prenom>
        </contact>
      </contacts>
    </contactCollection>
    Bonne chance

  3. #3
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Seules les variables publiques peuvent être serialisées avec la serialisation XML.
    Mehdi Feki : Modérateur .Net

  4. #4
    Membre régulier Avatar de Anto03
    Inscrit en
    Octobre 2005
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 155
    Points : 87
    Points
    87
    Par défaut
    C'est exact cependant j'ai trouvé une solution pour sérialiser mes getters. Il suffit de rajouter le tag [xmlElement] à la méthode.
    Pour ceux que ça intéresse :
    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
     
    class MaClasse()
    {
        private String attribut1;
     
        public Maclasse()
        {
            attribut1 = "";
        }
     
        [xmlElement]
        public String getAttribut1()
        {
           get { return attribut1; }
           set {attribut1 = value; }
        }
     
    }
    Antony, développeur .Net
    http://www.flecheinthepeche.fr/blog/

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

Discussions similaires

  1. Communication Java et .net avec fichiers XML
    Par missyasmine dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 10/08/2011, 14h53
  2. Réponses: 2
    Dernier message: 07/05/2011, 16h56
  3. Réponses: 0
    Dernier message: 26/10/2009, 11h44
  4. [VB.NET] modification fichier XML
    Par betaphp dans le forum Windows Forms
    Réponses: 5
    Dernier message: 12/11/2005, 11h13
  5. [VB.NET] Ecriture d'un fichier XML
    Par Le-Cortex dans le forum ASP.NET
    Réponses: 13
    Dernier message: 28/04/2004, 12h57

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