LinkLe 31/01/2009 à 12:02
Le XMLSerializer, étant basé sur la réflexion, c'est surtout un moyen rapide de sérialiser et désérialiser des POD. La sérialisation XML ne possédant pas de constructeur personnalisé, les membres en lecture seule ou privés ne peuvent pas être sérialisés simplement.
Par contre, on peut "personnaliser" la sérialisation XML en implémentant l'interface IXMLSerialisable, mais ça la désérialisation se fait toujours par {constructeur par défaut + désérialisation après construction} (comme la sérialisation COM, d'ailleurs).
À l'inverse, la sérialisation "normale" permet plus de trucs, utilise un vrai constructeur, et possède le droit ReflectionPermission(MemberAccess) pour invoquer le constructeur en question même s'il est privé. Le revers de la médaille, c'est qu'il faut écrire plus de code (et en plus, il me semble que c'est orthogonal à la sérialisation XML et ne peut pas s'y substituer, mais je n'ai pas vérifié).
En clair, ma "rule of thumb", c'est de limiter la sérialisation XML aux POD. Mais je peux faire plus compliqué si nécessaire.