Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mensiri Ahli Kamus dalam Kelas untuk Fail Konfigurasi?
Sirikan kelas yang mengandungi ahli kamus
Apabila cuba mensiri kelas yang mengandungi ahli kamus (seperti kelas fail konfigurasi), anda mungkin menghadapi ralat berikut:
<code>System.NotSupportedException: 无法序列化成员 App.Configfile.mappedDrives</code>
Ralat ini bermakna secara lalai, jenis Kamus tidak boleh disiri secara langsung. Untuk menyelesaikan isu ini, pertimbangkan untuk melaksanakan mekanisme bersiri tersuai.
Siri kamus tersuai
Salah satu cara ialah mencipta kelas tersuai yang mewarisi daripada Dictionary<TKey, TValue>
dan melaksanakan antara muka IXmlSerializable
. Coretan kod berikut menunjukkan pelaksanaan ini:
<code class="language-csharp">using System; using System.Collections.Generic; using System.Xml.Serialization; [XmlRoot("dictionary")] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable { public void ReadXml(System.Xml.XmlReader reader) { XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); bool wasEmpty = reader.IsEmptyElement; reader.Read(); if (wasEmpty) return; while (reader.NodeType != System.Xml.XmlNodeType.EndElement) { reader.ReadStartElement("item"); reader.ReadStartElement("key"); TKey key = (TKey)keySerializer.Deserialize(reader); reader.ReadEndElement(); reader.ReadStartElement("value"); TValue value = (TValue)valueSerializer.Deserialize(reader); reader.ReadEndElement(); this.Add(key, value); reader.ReadEndElement(); reader.MoveToContent(); } reader.ReadEndElement(); } public void WriteXml(System.Xml.XmlWriter writer) { XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); foreach (TKey key in this.Keys) { writer.WriteStartElement("item"); writer.WriteStartElement("key"); keySerializer.Serialize(writer, key); writer.WriteEndElement(); writer.WriteStartElement("value"); TValue value = this[key]; valueSerializer.Serialize(writer, value); writer.WriteEndElement(); writer.WriteEndElement(); } } }</code>
Kamus tersuai boleh mengambil bahagian dalam siri XML dengan melaksanakan IXmlSerializable
.
Penggunaan
Setelah kamus tersuai ditakrifkan, ia boleh digunakan untuk menyimpan pasangan nilai kunci yang diperlukan dalam kelas profil:
<code class="language-csharp">public class ConfigFile { ... public SerializableDictionary<string, string> mappedDrives = new SerializableDictionary<string, string>(); ... }</code>
Dengan pendekatan ini, kelas fail konfigurasi boleh disiri dan dinyahsiri tanpa menghadapi ralat bersiri.
Atas ialah kandungan terperinci Bagaimana untuk Mensiri Ahli Kamus dalam Kelas untuk Fail Konfigurasi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!