Implémentation de l'interface IXmlSerialised : bonnes pratiques et principes directeurs
Une bonne mise en œuvre de l'interface IXmlSerializable
est essentielle et des règles spécifiques et les meilleures pratiques doivent être suivies pour garantir une sérialisation et une désérialisation correctes.
Méthode GetSchema()
Contrairement à une idée fausse courante, les méthodes IXmlSerializable
implémentées GetSchema()
ne devraient pas renvoyer null
. Si un schéma personnalisé est requis, il doit être spécifié à l'aide de l'attribut XmlSchemaProviderAttribute
de la classe.
Méthode ReadXml()
Position de l'élément : la méthode ReadXml
doit passer à l'élément suivant avant de revenir. En effet, le framework écrit un élément wrapper et positionne le lecteur XML après sa balise d'ouverture. Les propriétés de l'objet doivent être lues dans cet élément wrapper, et la balise de fermeture de l'élément doit être lue pour terminer le processus de désérialisation.
Méthode WriteXml()
Élément racine : Dans la méthode WriteXml
, il n'est pas nécessaire d'écrire l'élément racine de l'objet. Le framework gère automatiquement les éléments wrapper, y compris les balises d'ouverture et de fermeture. L'implémentation doit écrire le contenu de l'objet, y compris tous les éléments enfants.
Éléments enfants :
Les objets enfants doivent être gérés et écrits de la même manière que leurs objets parents. Utilisez les méthodes ReadXml
et WriteXml
dans ces objets pour sérialiser et désérialiser leur état. La balise d'élément de fermeture des éléments enfants doit également être lue/écrite explicitement.
Exemple de mise en œuvre
Les exemples de code fournis démontrent MyCalendar
implémentations des classes MyEvent
et IXmlSerializable
, en suivant les meilleures pratiques décrites ci-dessus. Il lit/écrit correctement les attributs dans ReadXml
et WriteXml
, avec le positionnement attendu des éléments et la gestion des éléments wrapper.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!