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 :

Deserialization d'un array


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Deserialization d'un array
    Bonjour

    Je serialise une liste, tout va bien
    Si j'observe XML resultant je constate que la liste a été sauvée sous fome d'array

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <ArrayOfC_PrintObj>
      <C_PrintObj>
    Mais impossible de relire cet array !!

    "<ArrayOfC_PrintObj xmlns=''> was not expected."
    Voici ci-dessous le code de save et le code de Load
    Quel erreur pourrait exister dans le load ?

    Merci de votre aide / suggestions

    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
     
        // *******************************************************************************************
        private void SaveObj()
        {
          XmlSerializer xs;
          XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
          ns.Add("", "");
     
          List<C_PrintObj> lll = new List<C_PrintObj>();
     
          lll.Add(PrObj[0]);
     
          StreamWriter sw;
          string TemplateFile = "d:/tmp/xxx.xml";
          if (TemplateFile.Length <= 0)
          {
            return;
          }
          xs = new XmlSerializer(typeof(BindingList<C_PrintObj>));
          using (sw = new StreamWriter(TemplateFile, false, Encoding.Default))
          {
            xs.Serialize(sw, PrObj, ns);
            sw.Close();
          }
        }
        // *******************************************************************************************
     
        private void LoadObj()
        {
          C_PrintObj []ps;
          StreamReader sr;
          sr = new StreamReader("d:/tmp/xxx.xml", Encoding.Default);
          XmlSerializer xs;
          XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
          ns.Add("", "");
     
          xs = new XmlSerializer(typeof(C_PrintSettings []));
          try
          {
            ps = (C_PrintObj [])xs.Deserialize(sr);
          }
          catch (Exception e)
          {
            //          MessageBox.Show("Wrong Template file", "Error");
          }
        }
      }

  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
    Tu gères des namespace à la sauvegarde, mais pas au chargement (ns n'est pas utilisé). Mais bon, de toute façon débarrasse toi des XmlSerializerNamespaces tout court et ça devrait aller bien mieux.

    D'autant plus que ton code ne sert à rien, cf. la remarque ici.

    Edit : en fait pour désérialiser XmlSerializerNamespaces n'est pas du tout utile, donc le problème c'est peut être juste le fait d'indiquer un espace de nom et un préfixe vide.

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut Stormimonn

    Non ca ne va pas mieux
    Au save j'avais mis le NameSpace à "" car j'avais trouvé un post parlant de ca et dans le cas de la Serialisation / Désérialisation d'une classe simple c'est nécessaire
    Mais a la lecture on n'utilise pas de NameSpace
    (je vais relire en détail ton lien)

    Mais dans le cas present avec ou sans NameSpace j'ai toujours le problème
    C'est la deserialization d'un Array qui pose probleme

    Je commence a me demander si c'est possible avec un XmlSerializer ?

  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
    Je viens de comprendre et c'est normal.

    Tu sérialises un objet de type List<T> en indiquant de sérialiser un objet de type BindingList<T> et ensuite tu désérialises le tout en indiquant qu'il s'agit d'un objet de type T[]. Ce n'est pas logique du tout. Met les types en concordance et tu n'auras plus de problèmes.

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    A priori ta remarque est logique mais si je fais comme ca c'est parce que j'ai constaté que les serialisation List ou BindingList donnent exactement le meme résultat a savoir un

    <ArrayOfC_PrintObj>
    Et que comme la deserialisation Bindinglist posait problème j'ai essayé List
    Et en desespoir de cause j'ai essayé Array comme le nom du type dans le XML le laissait supposer

    Donc cette demarche n'est pas sans logique

  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
    Tu as donc déjà essayé en utilisant le même type à la sérialisation et à la désérialisation ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/08/2009, 15h59
  2. Erreur "size array"
    Par boobob dans le forum C
    Réponses: 3
    Dernier message: 06/08/2003, 10h18
  3. TStringList en array of string
    Par JediKerian dans le forum Langage
    Réponses: 2
    Dernier message: 20/03/2003, 15h37
  4. Réponses: 2
    Dernier message: 23/02/2003, 00h49
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

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