Implémenter correctement l'interface IXmlSerializing dans .NET
Une bonne mise en œuvre de l'interface IXmlSerializable
nécessite le respect de règles spécifiques et de bonnes pratiques.
Méthode GetSchema()
Les méthodesGetSchema()
devraient renvoyer null
. La documentation de l'interface IXmlSerializable
indique clairement qu'elle devrait être null
et si vous avez besoin d'un schéma personnalisé, vous devez utiliser l'attribut XmlSchemaProviderAttribute
sur la classe.
Méthode ReadXml()
Avancez le lecteur jusqu'à l'élément suivant avant de revenir. En effet, le framework gère automatiquement les éléments d'habillage, mais il est de la responsabilité de l'implémenteur de gérer la balise d'élément de fermeture.
Méthode WriteXml()
Évitez d'écrire l'élément racine des objets. Le framework positionne l'écrivain au début de l'élément encapsulé et l'implémenteur écrit son contenu.
Sous-objet
Traitez les objets enfants comme des membres réguliers de l'objet parent. Ils doivent être lus/écrits dans les méthodes WriteXml
et ReadXml
de l'objet parent.
Exemple de mise en œuvre
<code class="language-csharp">public class MyCalendar : IXmlSerializable { // ... public void ReadXml(XmlReader reader) { reader.MoveToElement(); _name = reader.GetAttribute("Name"); // ... reader.ReadToDescendant("MyEvent"); while (reader.NodeType != XmlNodeType.EndElement) { MyEvent evt = new MyEvent(); evt.ReadXml(reader); _events.Add(evt); reader.MoveToContent(); } reader.ReadEndElement(); } public void WriteXml(XmlWriter writer) { writer.WriteAttributeString("Name", _name); // ... foreach (MyEvent evt in _events) evt.WriteXml(writer); } }</code>
En suivant ces directives, vous pouvez vous assurer que vous implémentez des interfaces IXmlSerializable
correctes et cohérentes pour vos objets dans .NET.
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!