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?
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?
Alors au hasard parce qu'une fonction vérifie que l'instance n'est pas nulle ?
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.
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 ...
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.
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.
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.
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()); } }
CQFD
Partager