Amalan dan garis panduan terbaik untuk antara muka IXmlSerializable dalam C#
Apabila melaksanakan antara muka IXmlSerializable
, garis panduan dan amalan terbaik tertentu harus dipatuhi untuk memastikan pensirilan dan penyahsirilan objek yang betul.
Kaedah GetSchema()
Kaedah IXmlSerializable
biasanya akan mengembalikan GetSchema()
. Menurut dokumentasi rasmi, kaedah ini dikhaskan dan tidak boleh digunakan. Jika anda perlu menentukan skema tersuai, gunakan null
pada kelas sebaliknya. XmlSchemaProviderAttribute
Kaedah ReadXml()
Kaedah WriteXml()
WriteXml()
Mengendalikan sub-objek
Contoh
Pelaksanaan berikut adalah berdasarkan garis panduan di atas:
<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>
XML yang sepadan
<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>
anda mematuhi jangkaan rangka kerja dan membolehkan pensirilan dan penyahsirilan data yang boleh dipercayai. IXmlSerializable
Atas ialah kandungan terperinci Bagaimana cara terbaik melaksanakan antara muka ixmlserializable di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!