Maison > développement back-end > C++ > Comment implémenter au mieux l'interface IXMLSerializable dans C #?

Comment implémenter au mieux l'interface IXMLSerializable dans C #?

DDD
Libérer: 2025-01-27 14:36:14
original
963 Les gens l'ont consulté

How to Best Implement the IXmlSerializable Interface in C#?

Bonnes pratiques et directives pour l'interface IXmlSeriallessly en C#

Lors de la mise en œuvre de l'interface IXmlSerializable, certaines directives et bonnes pratiques doivent être suivies pour garantir une sérialisation et une désérialisation appropriées des objets.

Méthode GetSchema()

La méthode

de IXmlSerializable devrait normalement renvoyer GetSchema(). Selon la documentation officielle, cette méthode est réservée et ne doit pas être utilisée. Si vous devez spécifier un schéma personnalisé, appliquez plutôt null à la classe. XmlSchemaProviderAttribute

Méthode ReadXml()

    Lors de la lecture du XML, l'élément objet aurait dû être écrit. Après avoir lu les propriétés de l'objet, déplacez le lecteur vers l'élément suivant.
  • Assurez-vous de déplacer le lecteur vers l'élément de fermeture de l'objet d'emballage.

Méthode WriteXml()

    Au sein de
  • le framework sera responsable de l'écriture de l'élément d'emballage. Votre implémentation ne doit écrire que les propriétés de l'objet dans ce wrapper. WriteXml()
  • Évitez d'écrire l'élément racine des objets car cela suppose que l'élément racine a déjà été écrit.

Gestion des sous-objets

    Les objets enfants doivent être écrits en utilisant des méthodes similaires à celles des objets parents.
  • Chaque objet enfant doit être écrit dans son propre élément XML.

Exemple

La mise en œuvre suivante est basée sur les directives ci-dessus :

public class MyCalendar : IXmlSerializable
{
    [XmlElement]
    public string Name { get; set; }

    [XmlElement]
    public bool Enabled { get; set; }

    [XmlElement]
    public Color Color { get; set; }

    public List<MyEvent> Events = new List<MyEvent>();

    public XmlSchema GetSchema() => null;

    public void ReadXml(XmlReader reader)
    {
        reader.MoveToContent();
        if (reader.LocalName != "MyCalendar")
            throw new XmlException("意外的元素名称。");

        Name = reader.GetAttribute("Name");
        Enabled = bool.Parse(reader.GetAttribute("Enabled"));
        Color = Color.FromArgb(int.Parse(reader.GetAttribute("Color")));

        while (reader.ReadToFollowing("MyEvent"))
        {
            var evt = new MyEvent();
            evt.ReadXml(reader);
            Events.Add(evt);
        }
        reader.ReadEndElement();
    }

    public void WriteXml(XmlWriter writer)
    {
        writer.WriteAttributeString("Name", Name);
        writer.WriteAttributeString("Enabled", Enabled.ToString());
        writer.WriteAttributeString("Color", Color.ToArgb().ToString());

        foreach (var evt in Events)
        {
            writer.WriteStartElement("MyEvent");
            evt.WriteXml(writer);
            writer.WriteEndElement();
        }
    }
}
Copier après la connexion

XML correspondant

<mycalendar color="-14069085" enabled="True" name="Master Plan"><myevent start="start-value" stop="stop-value" title="Write Code"></myevent><myevent start="start-value" stop="stop-value" title="???"></myevent><myevent start="start-value" stop="stop-value" title="Profit!"></myevent></mycalendar>
Copier après la connexion
Ces bonnes pratiques garantissent que votre

implémentation est conforme aux attentes du framework et permet une sérialisation et une désérialisation fiables des données. IXmlSerializable

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal