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 :

Sérialisation désérialisation en XML - Valeurs par défaut


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut Sérialisation désérialisation en XML - Valeurs par défaut
    Salut !

    J'ai une "petite" question au sujet de la sérialisation/désérialisation de fichiers XML.

    Prenons une classe toute simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Test
       {
          public Test()
          {
             this.Var1 = double.NaN;
             this.Var2 = double.NaN;
          }
     
          public double Var1 { get; set; }
          public double Var2 { get; set; }
       }
    Mon fichier XML est une collection d'instances de cette classe. Mon problème est le suivant. Je voudrais que dans la collection, la première (que je suis capable d'identifier) soit une classe par défaut, c'est-à-dire que chacune des autres classes ait les valeurs par défaut si je ne spécifie pas le champ Var1 et/ou Var2. Tel que c'est là, par défaut les champs sont initialisé à NaN, mais est-ce possible et comment que ce soit initialisé avec une entrée dans mon fichier XML ?
    Enfin, si pour une entrée je ne spécifie qu'un seul champ, comment faire en sorte que dans le fichier XML de sortie je ne retrouve que ce champ et non tous les champs de la classe ?
    Merci pour votre aide !

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Par défaut
    Bonjour,

    J'ai rien compris a ton besoin, trop de mélange entre instance, classe et collection.
    La seule chose que j'ai compris c'est pour les champs qui ne doivent être sérialisés que s'ils sont correctement initialisés.
    Malheuresement XmlSerialiser ne permet pas de faire cela. DataContract le permet si et seulement si la valeur du champs correspond à la valeur par défaut du type du champs (Je sais pas si c'est tres clair ^^).
    Dans le case double.NaN ca ne marche pas, du coup il faut passé par une sérialisation XML personalisé en emplémentant IXmlSerializable.

  3. #3
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    C'est vrai que c'est pas très clair.
    Bref si j'ai bien compris , tu souhaite que lorsque tu sérialise ta classe si Var1 et Var2 sont rensigné on aura par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Test>
         <Var1>12</Var1>
         <Var2>8512</Var2>
    </Test>
    Et si seulement Var2 est renseigné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <Test>
         <Var2>8512</Var2>
    </Test>
    Si mon raisonnement est correcte jusque là, alors je pense également, comme Antoine, qu'il est préférable de passer par un IXmlSerializable.

  4. #4
    Membre confirmé
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Par défaut
    Ouin, désolé pour le manque de clareté, c'est que je suis un peu mêlé moi-même alors c'est difficile après une longue journée d'expliquer un problème qu'on a du mal soi-même à comprendre....

    Bref, après mes recherches j'étais arrivé à la même conclusion que vous, c'est-à-dire que je ne peux pas utiliser directement le serializer XML tel quel mais qu'il me faut implémenter ma propre interface. Je suis "utilisateur" et non "développeur" alors je vais laisser ce soin à d'autres. J'avais essayé de faire deux trois tests avec un DataContract sans réel succès, et de toute façon ça faisait juste la moitié du travail.

    Je vais juste essayer d'éclaircir ma question cependant.
    Voici le genre de XML que je voudrais en entrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <TestCollection>
       <Test Comment="Default">
          <Var1>10<Var1>
          <Var2>20<Var2>
       </Test>
       <Test Comment="Config1">
          <Var1>5</Var1>
       </Test>
    </TestCollection>
    Ainsi, lorsque je viens désérialiser ce XML en une classe "TestCollection" qui est simplement une collection de classes "Test", j'aurais voulu que les propriétés des deux classes Test "Default" et "Config1" soient les suivantes :

    Classe Test "Default" : Var1 = 10, Var2 = 20
    Classe Test "Config1" : Var1 = 5, Var2 = 20

    Par la suite, j'aurais voulu qu'en sérialisant ma classe "TestCollection", je retrouve exactement le même fichier XML que j'avais en entrée, c'est-à-dire que les champs qui ne sont pas les mêmes que ceux de la classe Test "Default" ne soient pas sérialisés.

    Est-ce plus clair ainsi ?

    Mais ce que je comprends de vos réponses, c'est que ceci n'est pas possible avec le sérializer XML tel quel, et qu'il me faut implémenter IXmlSerializable avec ses méthodes WriteXml, ReadXml, et GetSchema ?
    En y pensant, ça devrait finalement être dans mes cordes....

    Merci !

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/06/2015, 13h59
  2. Valeur par défaut d'un champ XML
    Par Jimmy91 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 04/09/2014, 10h40
  3. [XStream] Désérialiser un objet avec une valeur par défaut
    Par djodjo dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 21/04/2009, 13h47
  4. combobox XML et valeur par défaut
    Par nicocotiers dans le forum Flash
    Réponses: 3
    Dernier message: 03/10/2006, 16h37
  5. Unique + valeur par défaut
    Par ketalie dans le forum Outils
    Réponses: 4
    Dernier message: 02/07/2003, 15h29

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