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 :

Serialization et Equals


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 77
    Par défaut Serialization et Equals
    Bonjour,
    en débuggant une surcharge d'opérateur d'égalité problématique, je me suis aperçu que la serialization xml d'un objet faisait appel à sa fonction Equals.
    Je ne comprends pas pourquoi.
    Quelqu'un aurait-il des éclaircissements sur ce point?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    Alors au hasard parce qu'une fonction vérifie que l'instance n'est pas nulle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void Serialize(Object obj)
    {
    if(obj == null) <= OUI? NON?
    throw new ...
    sinon, en attendant que je remette la main sur ma boule de cristal et comme tu debug, tu consultes la pile d'appel et tu as la réponse à ta question.

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 77
    Par défaut
    J'ai réussi à debugger ma fonction, ce n'était pas l'objet de ma question!
    C'est juste que j'ai remarqué que la sérialization faisait appel à Equals, et le pourquoi de cet appel ne me paraît pas évident; Je voulais savoir pourquoi cette fonction était appelée dans ce cadre.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    OK, j'ai dis une grosse anerie.

    Après recherche il s'avère que c'est parce que la serialisation se protege des references circulaires.
    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
     
    public class A
    {
         [XmlElement("test")]
         public int test;
     
         [XmlElement("self")]
         public A self;
     
         public A()
         {
              self = this;
         }
     
         public override bool Equals(object obj)
         {
              return base.Equals(obj);
         }
    }
     
    static void Main(string[] args)
    {
         StringBuilder sb = new StringBuilder();
         using (XmlWriter writer = XmlWriter.Create(sb))
         {
              XmlSerializer s = new XmlSerializer(typeof(A));
              s.Serialize(writer, new A());
         }
    }
    Tu as un appel à Equals et une exception juste après. Equals sera appelé toujours 1 fois : quand le serializer supprime l'instance de sa collection d'objets à sérialiser.
    CQFD

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

Discussions similaires

  1. [debutant][struts]: utilisation du tag <logic:equal ...&g
    Par sleepy2002 dans le forum Struts 1
    Réponses: 13
    Dernier message: 23/11/2006, 17h04
  2. [DB2 V7 & V8] equivalent du type SERIAL
    Par geoffrey_k dans le forum DB2
    Réponses: 3
    Dernier message: 05/07/2004, 14h09
  3. [STRUTS] Tag Equal, comparer deux variables
    Par logica dans le forum Struts 1
    Réponses: 2
    Dernier message: 04/06/2004, 12h01
  4. [ Struts ] plusieurs conditions avec equal?
    Par njac dans le forum Struts 1
    Réponses: 7
    Dernier message: 04/06/2004, 09h04
  5. Problème de serialization
    Par bruno270579 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/04/2003, 18h11

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