Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mensiri Kelas dengan Ahli Kamus dalam C#?

Bagaimanakah Saya Boleh Mensiri Kelas dengan Ahli Kamus dalam C#?

DDD
DDDasal
2025-01-15 18:46:44333semak imbas

How Can I Serialize a Class with Dictionary Members in C#?

Menyerikan Kelas C# dengan Ahli Kamus: Penyelesaian Mudah

Ramai pembangun bergelut untuk menyusun kelas C# yang mengandungi kamus kerana salah faham biasa tentang kebolehsirilan mereka. Bertentangan dengan kepercayaan popular, kamus boleh bersiri dengan berkesan. Kuncinya ialah melaksanakan antara muka IXmlSerializable.

Membuat Kamus Generik Boleh Bersiri

Penyelesaian yang tersedia melibatkan penciptaan kamus generik yang melaksanakan IXmlSerializable. Ini membolehkan siri lancar:

<code class="language-csharp">[XmlRoot("dictionary")]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
{
    // Implementation omitted for brevity
}</code>

Menyepadukan ke dalam Kelas Konfigurasi Anda

Untuk menggunakan ini dalam kelas konfigurasi anda (cth., ConfigFile), gantikan ahli Dictionary standard anda dengan tersuai ini SerializableDictionary:

<code class="language-csharp">public SerializableDictionary<string, string> mappedDrives = new SerializableDictionary<string, string>();</code>

Pensirilan dan Penyahserikatan: Tiada Perubahan Diperlukan

Kaedah bersiri dan penyahserikatan sedia ada anda menggunakan XmlSerializer seharusnya berfungsi tanpa pengubahsuaian:

<code class="language-csharp">public bool Save(string filename)
{
    // Use XmlSerializer to serialize the file
}

public static ConfigFile Load(string filename)
{
    // Use XmlSerializer to deserialize the file
}</code>

Dengan melaksanakan IXmlSerializable, ahli kamus kini boleh bersiri sepenuhnya, menghapuskan pengecualian bersiri sebelumnya. Ini memberikan penyelesaian yang mudah kepada masalah yang sering dihadapi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mensiri Kelas dengan Ahli Kamus dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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