Rumah > pembangunan bahagian belakang > C++ > Bagaimana cara terbaik melaksanakan antara muka ixmlserializable di C#?

Bagaimana cara terbaik melaksanakan antara muka ixmlserializable di C#?

DDD
Lepaskan: 2025-01-27 14:36:14
asal
944 orang telah melayarinya

How to Best Implement the IXmlSerializable Interface in C#?

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()

    Apabila membaca XML, elemen objek sepatutnya telah ditulis. Selepas membaca sifat objek, alihkan pembaca ke elemen seterusnya.
  • Pastikan anda mengalihkan pembaca ke elemen penutup objek pembalut.

Kaedah WriteXml()

    Dalam
  • rangka kerja akan bertanggungjawab untuk menulis elemen pembalut. Pelaksanaan anda hanya perlu menulis sifat objek dalam pembungkus ini. WriteXml()
  • Elakkan menulis unsur akar untuk objek kerana ia menganggap unsur akar telah ditulis.

Mengendalikan sub-objek

    Objek kanak-kanak hendaklah ditulis menggunakan kaedah yang sama seperti objek induk.
  • Setiap objek kanak-kanak hendaklah ditulis pada elemen XMLnya sendiri.

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>
Salin selepas log masuk

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>
Salin selepas log masuk
Amalan terbaik ini memastikan pelaksanaan

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan