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 :

Serialisation de classe incrustée dans un writer


Sujet :

C#

  1. #1
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    Par défaut Serialisation de classe incrustée dans un writer
    Bonjour

    J'ai un problème de serialisation que j'essaye de comprendre
    Je vais essayer d'expliquer sans etaler trop de code

    Je dispose d'une classe C_PrintSettings que je parviens a serialiser et deserialize automatiquement dans un fichier que je force ! (voir code ci dessous)

    Par contre si j'utilise la meme technique en passant par un XmlWriter et un XmlReader qui emballent d'autres choses dans le fichier sérializé je retrouve ma classe tres correctement serializée dans le fichier global mais je ne parviens pas a la désérializer (mon XmlDeserialize.deserialize renvoie une exception)

    Je peux imaginer que c'est parce que le deserialize ne voit pas bien ou commencer ou bien ou s'arreter dans le fichier général mais je ne vois pas ce qu'il faut faire pour y arriver

    Merci aux connaisseurs de ce sujt que j'essaye de bien digérer !




    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
        // *******************************************************************************************
        private void SaveSetting()
        {
          XmlSerializer xs;
          XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
          ns.Add("", "");
     
          StreamWriter sw;
          string TemplateFile = "d:/tmp/xxx.xml";
          if (TemplateFile.Length <= 0)
          {
            return;
          }
          xs = new XmlSerializer(typeof(C_PrintSettings));
          using (sw = new StreamWriter(TemplateFile, false, Encoding.Default))
          {
            xs.Serialize(sw, Document.PrintSettings,ns);
            sw.Close();
          }
        }
     
        private void LoadSetting()
        {
          C_PrintSettings ps = new C_PrintSettings();
          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_PrintSettings)xs.Deserialize(sr);
          }
          catch (Exception e)
          {
              MessageBox.Show("Erreur", "Error");
          }
        }

  2. #2
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    Par défaut illustration + de détails
    re-bonjour

    Pour essayer d'un peu mieux expliquer le problème voici
    1- Le detail du code que j'emploie pour lire mon fichier serialisé et qui bloque sur

    2- Le debut du fichier et la partie significative

    J'ai le sentiment que je dois faire qq chose pour positionner le reader su C_printsetting avant d'appeller le XmlSerialize mais je ne sais pas comment ni meme si ce que je veux faire peut marcher ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      public void ReadXml(XmlReader reader)
        {
          if (!reader.IsStartElement("Document"))
          {
            return;
          }
          title = reader["Title"];
     
          printSettings=C_PrintSettings.ReadXmlR(reader);
     
    }
    Classe C_Printsetting encapsulée dans document Ne marche pas :

    <?xml version="1.0" encoding="utf-8"?>
    <Document Type="Mapscope.Document.1" Title="Test Oli" Version="1.0.0.2">
    <C_PrintSettings>
    <LgdDrawCellBorder>true</LgdDrawCellBorder>
    <LgdDrawFrameBorder>true</LgdDrawFrameBorder>
    <LgdDrawColorBorder>true</LgdDrawColorBorder>
    <LgdDrawColHead>true</LgdDrawColHead>
    <LgdDrawMainHead>true</LgdDrawMainHead>
    <LgdBorderColor>
    <A>255</A>
    <R>255</R>
    <G>0</G>
    <B>128</B>
    </LgdBorderColor>

    // etc


    Classe C_Printsetting seule dans son fichier ca marche en utilisant le XmlSerialiser avec un stream :

    <?xml version="1.0" encoding="Windows-1252"?>
    <C_PrintSettings>
    <LgdDrawCellBorder>true</LgdDrawCellBorder>
    <LgdDrawFrameBorder>true</LgdDrawFrameBorder>
    <LgdDrawColorBorder>true</LgdDrawColorBorder>
    <LgdDrawColHead>true</LgdDrawColHead>
    <LgdDrawMainHead>true</LgdDrawMainHead>
    <LgdBorderColor>
    <A>255</A>
    <R>255</R>
    <G>0</G>
    <B>128</B>
    </LgdBorderColor>

  3. #3
    Membre émérite
    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
    Points : 2 498
    Points
    2 498
    Par défaut Trouvé
    Ouf !

    J'ai trouvé, il suffit de faire un ReadToTollowing("MaClasse") dans le reader avant d'appeller le XmlSerializer.Deserialize()

    Sinon XmlSerializer.Deserialize() ne sait pas ou commencer !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/08/2011, 16h34
  2. Réponses: 4
    Dernier message: 16/04/2009, 01h43
  3. [Traitement d'image] halo de lumière incrusté dans une image
    Par cyber_N dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 17/06/2005, 15h37
  4. [JAR]Class-Path dans le fichier Manifest
    Par Kleb dans le forum Général Java
    Réponses: 5
    Dernier message: 08/01/2005, 08h51
  5. [GEF]class Figure dans container SWING ?
    Par Albarad dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 01/06/2004, 12h12

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