C#-Klassen mit Wörterbuchmitgliedern serialisieren: Eine einfache Lösung
Viele Entwickler haben Schwierigkeiten, C#-Klassen, die Wörterbücher enthalten, zu serialisieren, da häufig Missverständnisse über deren Serialisierbarkeit bestehen. Entgegen der landläufigen Meinung können Wörterbücher effektiv serialisiert werden. Der Schlüssel liegt in der Implementierung der IXmlSerializable
-Schnittstelle.
Erstellen eines serialisierbaren generischen Wörterbuchs
Eine leicht verfügbare Lösung besteht darin, ein generisches Wörterbuch zu erstellen, das IXmlSerializable
implementiert. Dies ermöglicht eine nahtlose Serialisierung:
<code class="language-csharp">[XmlRoot("dictionary")] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable { // Implementation omitted for brevity }</code>
Integration in Ihre Konfigurationsklasse
Um dies in Ihrer Konfigurationsklasse zu verwenden (z. B. ConfigFile
), ersetzen Sie Ihr Standardmitglied Dictionary
durch dieses benutzerdefinierte SerializableDictionary
:
<code class="language-csharp">public SerializableDictionary<string, string> mappedDrives = new SerializableDictionary<string, string>();</code>
Serialisierung und Deserialisierung: Keine Änderungen erforderlich
Ihre vorhandenen Serialisierungs- und Deserialisierungsmethoden, die XmlSerializer
verwenden, sollten ohne Änderungen funktionieren:
<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>
Durch die Implementierung von IXmlSerializable
ist das Wörterbuchmitglied jetzt vollständig serialisierbar, wodurch frühere Serialisierungsausnahmen entfallen. Dies bietet eine unkomplizierte Lösung für ein häufig auftretendes Problem.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Klasse mit Wörterbuchmitgliedern in C# serialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!