Heim > Backend-Entwicklung > C++ > Wie implementiert man die IXmlSerializable-Schnittstelle am besten in C#?

Wie implementiert man die IXmlSerializable-Schnittstelle am besten in C#?

DDD
Freigeben: 2025-01-27 14:36:14
Original
944 Leute haben es durchsucht

How to Best Implement the IXmlSerializable Interface in C#?

Best Practices und Richtlinien für die IXmlSerializable-Schnittstelle in C#

Bei der Implementierung der IXmlSerializable-Schnittstelle sollten bestimmte Richtlinien und Best Practices befolgt werden, um eine ordnungsgemäße Serialisierung und Deserialisierung von Objekten sicherzustellen.

GetSchema()-Methode

Die

-Methode von IXmlSerializable sollte normalerweise GetSchema() zurückgeben. Laut offizieller Dokumentation ist diese Methode reserviert und sollte nicht verwendet werden. Wenn Sie ein benutzerdefiniertes Schema angeben müssen, wenden Sie stattdessen null auf die Klasse an. XmlSchemaProviderAttribute

ReadXml()-Methode

    Beim Lesen des XML sollte das Objektelement geschrieben worden sein. Nachdem Sie die Eigenschaften des Objekts gelesen haben, bewegen Sie den Reader zum nächsten Element.
  • Bewegen Sie das Lesegerät unbedingt zum Abschlusselement des Verpackungsobjekts.

WriteXml()-Methode

    Innerhalb von
  • ist das Framework für das Schreiben des Umhüllungselements verantwortlich. Ihre Implementierung sollte die Eigenschaften des Objekts nur innerhalb dieses Wrappers schreiben. WriteXml()
  • Vermeiden Sie das Schreiben des Stammelements für Objekte, da davon ausgegangen wird, dass das Stammelement bereits geschrieben wurde.

Umgang mit Unterobjekten

    Untergeordnete Objekte sollten mit ähnlichen Methoden wie übergeordnete Objekte geschrieben werden.
  • Jedes untergeordnete Objekt sollte in sein eigenes XML-Element geschrieben werden.

Beispiel

Die folgende Umsetzung basiert auf den oben genannten Richtlinien:

<code class="language-csharp">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();
        }
    }
}</code>
Nach dem Login kopieren

entsprechendes XML

<code class="language-xml"><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></code>
Nach dem Login kopieren
Diese Best Practices stellen sicher, dass Ihre

Implementierung den Erwartungen des Frameworks entspricht und eine zuverlässige Serialisierung und Deserialisierung von Daten ermöglicht. IXmlSerializable

Das obige ist der detaillierte Inhalt vonWie implementiert man die IXmlSerializable-Schnittstelle am besten in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage