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 :

Problème de dé-serialisation d'une liste


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes

    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Par défaut Problème de dé-serialisation d'une liste
    Bonjour,

    Voici mon problème : je ne parviens pas à dé-serialiser une liste de recettes (contenant une liste d'ingrédients, contenue dans un XML). Vous trouverez le message d'erreur en PJ.
    J'ai eu beau parcourir les forums, rien n'a pu me faire résoudre ce problème pénible ..

    Voici mon code métier :

    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
       [XmlRoot("Recettes", IsNullable = false)]    
        public class Recette
        {    
            [XmlElement]
            public string NomRecette;
            [XmlElement]
            public string CategorieRecette;
            [XmlArray("Ingredients")]
            public Ingredient[] Ingredients;
            [XmlElement]
            public string PreparationRecette;
            [XmlElement]
            public string CuissonRecette;
     
            //public bool AjouterRecette
        }
     
        public class Ingredient
     
        {
            [XmlElement]
            public string NomIngredient;
            [XmlElement]
            public double QuantiteIngredient;
            [XmlElement]
            public string UniteIngredient;
        }
    Voici le code de dé-serialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            public void DeSerialiserXML()
            {
                try
                {
                    RecettesFromXml = (List<Recette>)serializer.Deserialize(FLuxES.Stream_lecture);
                    FLuxES.liberer_stream_lecture();
                }
                catch (System.InvalidOperationException e)
                {
                    MessageBox.Show("Echec lors de la lecture des recettes \r \n" + e.ToString(), "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    Le code de serialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            private void SerialiserXML()
            {
                try
                {
                    serializer.Serialize(FLuxES.Stream_ecriture, RecettesFromXml);
                    FLuxES.liberer_stream_ecriture();
                }
                catch (System.InvalidOperationException e)
                {
                    MessageBox.Show("Echec lors de la sauvegarde des recettes \r \n" + e.ToString(), "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    Sachant que RecettesFromXml est définit comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public List<Recette> RecettesFromXml;
    Après l'enregistrement de deux recettes test, voici le contenu du 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
    <?xml version="1.0" encoding="utf-8"?>
    <ArrayOfRecette xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Recette>
        <NomRecette>Recette_test</NomRecette>
        <CategorieRecette>Entrée</CategorieRecette>
        <Ingredients>
          <Ingredient>
            <NomIngredient>Carotte</NomIngredient>
            <QuantiteIngredient>100</QuantiteIngredient>
            <UniteIngredient>g</UniteIngredient>
          </Ingredient>
          <Ingredient>
            <NomIngredient>Carotte</NomIngredient>
            <QuantiteIngredient>100</QuantiteIngredient>
            <UniteIngredient>g</UniteIngredient>
          </Ingredient>
        </Ingredients>
        <PreparationRecette>Blabla</PreparationRecette>
        <CuissonRecette>Blabla</CuissonRecette>
      </Recette>
      <Recette>
        <NomRecette>Recette_test_2</NomRecette>
        <CategorieRecette>Entrée</CategorieRecette>
        <Ingredients>
          <Ingredient>
            <NomIngredient>Carotte</NomIngredient>
            <QuantiteIngredient>200</QuantiteIngredient>
            <UniteIngredient>g</UniteIngredient>
          </Ingredient>
          <Ingredient>
            <NomIngredient>Carotte</NomIngredient>
            <QuantiteIngredient>200</QuantiteIngredient>
            <UniteIngredient>g</UniteIngredient>
          </Ingredient>
        </Ingredients>
        <PreparationRecette>Blabla_2</PreparationRecette>
        <CuissonRecette>Blabla_2</CuissonRecette>
      </Recette>
    </ArrayOfRecette>
    (le ArrayOfRecette commence à m'agacer )

    Au démarrage de l'application, j'essaie de charger les recettes ... et du coup badaboum à la dé-serialisation ...

    Qu'en dites-vous ?
    Où peut bien se trouver le bug qui fait tout péter ? En tout cas, je ne m'en sors pas.
    Merci par avance pour vos réponses chers passionés !!
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Comment est défini Stream_lecture ? Tu peux nous montrer sa création. Tu ne ferai pas un premier read dessus par hasard ?

    Question subsidiaire : on t'oblige à coder en français ou c'est toi qui choisi ?

    J'ai envie de pleurer quand je vois ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FLuxES.liberer_stream_lecture();

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 162
    Par défaut
    Salut Sky, c'est Benji !!! Je comprend ta remarque, c'est moche

    Bon, sinon pour ton problème Maskass41, t'es-tu assuré que ton fichier XML est déjà créé avec l'entête XML suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="utf-8"?>
    Je pense que non vu ton message d'erreur.

    Il me semble également que la balise ArrayOfRecette doit également être présent avant la désérialisation.

    Ton problème vient du fait que tu essaies de désérialiser un fichier XML totalement vide. Tu dois au mois avoir l'en-tête et la balise root de créées.

  4. #4
    Membre régulier
    Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes

    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Par défaut
    Bonjour messieurs !

    Je partage votre point de vue sur l'écriture du code, mais que voulez-vous, on fait pas toujours ce que l'on veut ..

    Je viens de résoudre mon problème grâce à ta remarque Skyounet, concernant le Sream_lecture. L'attribut EndOfStream était à true ... tout bêtement parce qu'un premier passage (inutile) est effectué !! Du coup, pas étonnant que la dé-serialisation pète.

    brazilia28 : c'est le serialiser lui-même qui a généré le fichier XML présenté, d'où mon étonnement.

    Mes connaissances en XML sont encore hésitantes, merci pour votre aide et le responsable des normes de codage va (encore) en prendre plein la tronche

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Maskass41 Voir le message
    Je viens de résoudre mon problème grâce à ta remarque Skyounet, concernant le Sream_lecture. L'attribut EndOfStream était à true ... tout bêtement parce qu'un premier passage (inutile) est effectué !! Du coup, pas étonnant que la dé-serialisation pète.
    C'est ce que je me disais.
    Du coup tu as juste à replacer ton curseur au début.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonFlux.Seek(0, System.IO.SeekOrigin.Begin);

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

Discussions similaires

  1. Problème avec un bouton lié à une liste déroulant
    Par valouche dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/06/2007, 13h55
  2. Problème requête d'affichage d'une liste
    Par mLk92 dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/01/2007, 11h17
  3. Réponses: 10
    Dernier message: 08/12/2006, 02h18
  4. Réponses: 28
    Dernier message: 24/05/2006, 18h20
  5. Problème d'affichage dynamique d'une liste
    Par bor1s dans le forum ASP
    Réponses: 2
    Dernier message: 18/11/2005, 16h18

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