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

Windows Forms Discussion :

Problème sérialisation XML [C#]


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 155
    Points : 88
    Points
    88
    Par défaut Problème sérialisation XML [C#]
    Bonjour,
    j'essaye d'exporter mes collection dans un fichier xml.
    Mais celui ci m'affiche l'erreur:

    Gestion_expositions.OeuvreXML est inaccessible en raison de son niveau de protection. Seuls les type publics peuvent être traités.
    Pourtant ma classe OeuvreXML est en public ainsi que toute les données de sa partie statique et ses methodes.

    Voici comment je fais la sérialisation:
    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
     SaveFileDialog sFD = new SaveFileDialog();
     
                sFD.Filter = "Fichier texte (*.xml)|*.xml";
                sFD.RestoreDirectory = true ;
     
                if (sFD.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
     
                        int i;
                        OeuvreEnVente uneoeuvre;
     
                         Collection unecollectionxml = new Collection();
                        FileStream stream = new FileStream(sFD.FileName, FileMode.Create);
                        XmlSerializer serializer = new XmlSerializer(typeof(Collection), new Type[] { typeof(OeuvreXML) });
                        for (i = 0; i < mesCatalogue.cardinal(); i++)
                        {
                            OeuvreXML uneoeuvrexml = new OeuvreXML();
                            uneoeuvre = ((OeuvreEnVente)mesCatalogue.donnerObjet(i));
                            uneoeuvrexml.Initialise(uneoeuvre.getEtat(), uneoeuvre.getPrix());
                            unecollectionxml.ajouterObjet(uneoeuvrexml);
                        }
                        serializer.Serialize(stream, unecollectionxml);
                        stream.Close();
                    }
                    catch (Exception argh)
                    {
                        MessageBox.Show(argh.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
    et voici ma classe OeuvreXML:
    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
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Xml.Serialization;
     
    /// classe utilisé pour la sérialisation en xml
    namespace Gestion_expositions
    {
        [Serializable] //Sérialisation de l’objet mescatalogues
        [System.Xml.Serialization.XmlRootAttribute("mescatalogues", Namespace = "", IsNullable = false)]
     
        class OeuvreXML
        {
            public OeuvreXML()
            {
                //Constructeur
            }
     
            [System.Xml.Serialization.XmlElementAttribute(DataType = "string")]
            public string etat;
     
            [System.Xml.Serialization.XmlElementAttribute(DataType = "double")]
            public double PrixOeuvre;
     
            //[System.Xml.Serialization.XmlElementAttribute(DataType = "unsignedInt")]
            //public uint compteID;
     
            //[System.Xml.Serialization.XmlElementAttribute(DataType = "decimal")]
            //public decimal decouvert;
     
            //[System.Xml.Serialization.XmlElementAttribute(DataType = "date")]
            //public DateTime datecreation;
     
            public void Initialise(string et, double prix)
            {
                etat = et;
                PrixOeuvre = prix;
                //compteID = c;
                //decouvert = d;
                //datecreation = dc;
     
            }
        }
    }
    Pour info, je travaille avec Visual studio 2005

    Merci d'avance

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    Ta classe n'est pas publique.
    Sous VS 2005, le niveau de visibilité par défaut (employé ici puisqu'aucun modificateur n'est indiqué) est internal.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 155
    Points : 88
    Points
    88
    Par défaut
    Bonjour et merci !
    Cela marche correctement

    Mais je ne sait pas si je fais la bonne chose.
    J'ai une classe catalogue ou sont regroupé une collection d'oeuvres en vente,donc pour un catalogue, je peut avoir plusieurs oeuvres sachant qu'il y a plusieurs catalogues.

    Voila le code que j'effectue pour serialiser en XML:
    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
    SaveFileDialog sFD = new SaveFileDialog();
     
                sFD.Filter = "Fichier texte (*.xml)|*.xml";
                sFD.RestoreDirectory = true ;
     
                if (sFD.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
     
                        int i;
                         Collection unecollectionxml = new Collection();
                        FileStream stream = new FileStream(sFD.FileName, FileMode.Create);
                        XmlSerializer serializer = new XmlSerializer(typeof(Collection), new Type[] { typeof(OeuvreXML) });
                        for (i = 0; i < mesCatalogue.cardinal(); i++)
                        {
                            Catalogue uncatalogue = new Catalogue();
                            uncatalogue = (Catalogue)mesCatalogue.donnerObjet(i);
     
                            //on va chercher les oeuvres de ce catalogue
                            int h = uncatalogue.getMesOeuvres().cardinal();
                            for (int k = 0; k < h; k++)
                            {
                                OeuvreEnVente uneoeuvre = new OeuvreEnVente();
                                uneoeuvre = (OeuvreEnVente)uncatalogue.getMesOeuvres().donnerObjet(k);
     
                                OeuvreXML uneoeuvrexml = new OeuvreXML();
                                uneoeuvrexml.Initialise(uncatalogue.getNom(),uncatalogue.getNum(), uneoeuvre.getTitre(), uneoeuvre.getPrix(),uneoeuvre.getNumero(),uneoeuvre.getEtat());
                                unecollectionxml.ajouterObjet(uneoeuvrexml);
                            }
                        }
                        serializer.Serialize(stream, unecollectionxml);
                        stream.Close();
                    }
                    catch (Exception argh)
                    {
                        MessageBox.Show(argh.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
    Ceci me donne:
    <?xml version="1.0" ?>
    - <Collection xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xmlnssd="http://www.w3.org/2001/XMLSchema">
    - <unecollection>
    - <anyType xsi:type="OeuvreXML">
    <nomCatalogue>vjjghj</nomCatalogue>

    <numCatalogue>1</numCatalogue>

    <titreOeuvre>hfgh</titreOeuvre>

    <PrixOeuvre>125</PrixOeuvre>

    <numeroOeuvre>1110132257</numeroOeuvre>

    <etatOeuvre>R</etatOeuvre>

    </anyType>


    - <anyType xsi:type="OeuvreXML">
    <nomCatalogue>vjjghj</nomCatalogue>

    <numCatalogue>1</numCatalogue>

    <titreOeuvre>leonardo</titreOeuvre>

    <PrixOeuvre>1600</PrixOeuvre>

    <numeroOeuvre>1049275302</numeroOeuvre>

    <etatOeuvre>L</etatOeuvre>

    </anyType> </unecollection>


    </Collection>






    et j'essaye d'improrter desormais à partir du fichier XML mais cela ne marche pas , les catalogues ne sont pas récupérés

    Voici comment je recupere:
    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
    int i;
     
                Catalogue uncatalogue;
                Collection unecollectionxml;
     
                unecollectionxml = new Collection();
                OeuvreXML uneoeuvreXML;
     
                XmlSerializer serializer = new XmlSerializer(typeof(Collection), new Type[] { typeof(OeuvreXML) });
                FileStream stream = new FileStream("fichier.xml", FileMode.Open);
     
                unecollectionxml = (Collection)serializer.Deserialize(stream);
                stream.Close();
     
                for (i = 0; i < unecollectionxml.cardinal(); i++)
                {
                    uneoeuvreXML = ((OeuvreXML)unecollectionxml.donnerObjet(i));
                    OeuvreEnVente uneoeuvre = new OeuvreEnVente();
     
                    double prixoeuvre=Convert.ToDouble(uneoeuvreXML.PrixOeuvre);
                    string titreoeuvre = Convert.ToString(uneoeuvreXML.titreOeuvre);
     
                    mesCatalogue.ajouterObjet(unecollectionxml);
     
                    uneoeuvre.init(titreoeuvre, prixoeuvre);
                    mesCatalogue.ajouterObjet(uneoeuvre);
    Que modifier pour que je serialiser/deserialiser correctement?

    Merci d'avance

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 155
    Points : 88
    Points
    88
    Par défaut
    personne?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 155
    Points : 88
    Points
    88
    Par défaut
    pti up désespéré

Discussions similaires

  1. Problème sérialisation XML
    Par mappy dans le forum C#
    Réponses: 8
    Dernier message: 25/10/2012, 08h36
  2. Problème de sérialisation XML
    Par fcolinet dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/08/2012, 16h25
  3. Problème de sérialisation XML
    Par loicounet dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 04/09/2009, 09h52
  4. problème de sérialisation xml
    Par Pol63 dans le forum VB.NET
    Réponses: 0
    Dernier message: 26/02/2009, 17h32
  5. Problème de sérialisation XML d'une Array
    Par Abakai dans le forum C#
    Réponses: 3
    Dernier message: 21/05/2007, 15h30

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