Un point qu'il semble que tu n'es pas assimilé c'est qu'il n'y a pas UNE sérialisation mais autant de forme de sérialisation possible que tu inventes de format.
En Delphi le mécanisme de sérialisation utilisé pour les composants s'appuie les propriétés publiées car elles génère des RTTI, des informations qui permettent de faire de la réflexion sur n'importe quel objet.
Ainsi pour n'importe quel objet et sans que la variable qui contient l'objet soit d'un type particulier je peux savoir les noms, types et valeurs, exhaustivement, de chacune des propriétés publiées de cet objet.
Avec un mécanisme générique je peux donc extraire toutes les informations (publiées) d'un objet quel qu'il soit.
C'est pratique mais ce n'est pas une obligation de l'utiliser, c'est au choix.
C'est pour ça que je dis qu'il n'y a pas qu'une seule façon de faire de la sérialisation, tu as mis le doigt sur l'un des inconvénients des RTTI c'est qu'il ne marche qu'avec les champs publiés, impossibles d'avoir les champs privés, protégés ou même public.
Une façon de voir les choses est de déclarer une classe de base avec une méthode (abstraite ou au moins virtuelle) qui ne sert qu'à faire la sérialisation sous format XML par exemple. Puis chaque classe fille doit redéfinir son traitement de sérialisation propre.
en fait si c'est possible ! c'est l'objet de DefineProperties
mais il me semble plus simple d'implémenter les LoadFromStream et SaveToStream pour chaque instance à sérialiser
Surtout que ça évite d'éventuelles surprises si CodeGear décide de changer le comportement de TReader/TWriter dans les futures versions de Delphi![]()
Ok en fait c'est la méthode proposé par CodeGear pour implémenter mon idée de méthode abstraite qui fait la sérialisation pour chaque objet.
Néanmoins il ne faut pas perdre de vue que ce n'est pas fait "implicitement" chaque classe doit redéfinir DefineProperties et lui implanter son comportement particulier de sérialisation.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager