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 :

Erreur de désérialisation


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Points : 13
    Points
    13
    Par défaut Erreur de désérialisation
    Bonjour,

    Je sérialise un objet dans un fichier xml a l'aide de XmlSerializer. Lorsque je réalise l'oppération Serialize() tout se passe parfaitement, mon fichier est bien completé par mon objet sérialiser

    Cependant lors de la relecture une erreur est levée sur une propiété de la classe consernée...
    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
     
    ...
            [XmlAttribute("Time")]
            public string RecordDateFormatted
            {
                get
                {
                    return RecordDate.ToString("dd/MM/yyyy HH:mm", new CultureInfo("fr-fr"));
                }
                set
                {
                    RecordDate = DateTime.ParseExact(value, "dd/MM/yyyy HH:mm", new CultureInfo("fr-fr"));
                }
            }
    ...
    Il m'indique que le format de la chaine de date à transformer soit: "dd/MM/yyyy HH:mm" n'est pas correct.

    Exception non gérée*: System.InvalidOperationException: Il existe une erreur dans le document XML (11, 4). ---> System.FormatException: La chaîne n'a pas été reconnue en tant que DateTime valide.
    à System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)

    Mon fichier XML contient les élements suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    <Record Id="0" Time="29/06/2010 23:45">
        <Product>
          <Value>47661860</Value>
          <Unit>Litre</Unit>
          <Name>Prod</Name>
        </Product>
    </Record>
    ...
    Je ne comprend pas pourquoi il n'arrive par a désérialiser la chaine attribut "Time" de mon objet Record.


    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 766
    Points
    766
    Par défaut
    Pourquoi tu sérialises RecordDateFormatted? Car sa valeur est toujours recalculé en fonction de RecordDate. Il n'a pas de valeur à lui directement.
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs. Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Afin de controller le format de la propriété et de rendre le fichier Xml plus lisible.

    J'ai oublier un bout de code...
    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
     
            [XmlIgnore]
            public DateTime RecordDate { get; set; }
     
            [XmlAttribute("Time")]
            public string RecordDateFormatted
            {
                get
                {
                    return RecordDate.ToString("dd/MM/yyyy HH:mm", new CultureInfo("fr-fr"));
                }
                set
                {
                    RecordDate = DateTime.ParseExact(value, "dd/MM/yyyy HH:mm", new CultureInfo("fr-fr"));
                }
            }
    Merci

  4. #4
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,

    peut-être le format d'encodage du fichier XML quand tu le sauvegardes ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Points : 13
    Points
    13
    Par défaut
    Ouai, j'ai pensé a ce problème.

    Mais étant donné que la machine ne me donne que des caractère ASCII j'ai placé l'encodage du fichier sur ce format

    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
    Console.WriteLine("Objet chargé");
                        //Serialisation de l'objet dans un flux Xml en mémoire
                        swriter = new StringWriter();
                        xmlSerial = new XmlSerializer(typeof(RecordSet));
                        xmlSerial.Serialize(swriter, rs);
     
                        //Ecriture du Flux Xml dans un fichier
                        fs = new FileStream(@"E:\Test\plop.xml", FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                        StreamWriter sw = new StreamWriter(fs, Encoding.ASCII);
                        sw.WriteLine(swriter.ToString());
                        sw.Flush();
                        sw.Close();
                        Console.WriteLine("Fichier de donnée XML généré...");
     
                        //Emission du flux xml au WebService
                        //myWebservice.Push(swriter.ToString());
                        //Console.WriteLine("Donnée envoyée au ws...");
     
                        fs = new FileStream(@"E:\Test\plop.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                        sr = new StreamReader(fs, Encoding.ASCII);
                        rs = (RecordSet) xmlSerial.Deserialize(sr);
                        sr.Close();
                        Console.WriteLine("Désérialisation du fichier XML...");
    PS: je sérialise d'abord en mémoire, car normalement, je n'écrit pas l'objet dans un fichier mais bien dans soap.

    L'erreur se produit lorsque le "Set" est exécuté...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set
    {
         RecordDate = DateTime.ParseExact(value, "dd/MM/yyyy HH:mm", new CultureInfo("fr-fr"));
    }
    merci

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 766
    Points
    766
    Par défaut
    Ta essayé ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RecordDate = DateTime.ParseExact(value, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture);
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs. Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.

Discussions similaires

  1. [Débutant] WCF : Erreur de désérialisation de la classe DataTable
    Par BaptisteG dans le forum C#
    Réponses: 7
    Dernier message: 02/05/2014, 12h35
  2. Webservice Client JAX ws erreur de désérialisation
    Par Maskime dans le forum Services Web
    Réponses: 1
    Dernier message: 20/05/2010, 14h35
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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