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
WriteXml()-Methode
WriteXml()
Umgang mit Unterobjekten
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>
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>
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!