Heim >Backend-Entwicklung >C++ >Wie serialisiere ich ein Wörterbuchmitglied in einer Klasse für Konfigurationsdateien?
Serialisieren Sie eine Klasse, die Wörterbuchmitglieder enthält
Beim Versuch, eine Klasse zu serialisieren, die Wörterbuchmitglieder enthält (z. B. eine Konfigurationsdateiklasse), kann die folgende Fehlermeldung auftreten:
<code>System.NotSupportedException: 无法序列化成员 App.Configfile.mappedDrives</code>
Dieser Fehler bedeutet, dass der Dictionary-Typ standardmäßig nicht direkt serialisiert werden kann. Um dieses Problem zu beheben, sollten Sie die Implementierung eines benutzerdefinierten Serialisierungsmechanismus in Betracht ziehen.
Benutzerdefinierte Wörterbuchserialisierung
Eine Möglichkeit besteht darin, eine benutzerdefinierte Klasse zu erstellen, die von Dictionary<TKey, TValue>
erbt und die IXmlSerializable
-Schnittstelle implementiert. Der folgende Codeausschnitt demonstriert diese Implementierung:
<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>
Benutzerdefinierte Wörterbücher können durch Implementierung von IXmlSerializable
an der XML-Serialisierung teilnehmen.
Nutzung
Sobald ein benutzerdefiniertes Wörterbuch definiert ist, kann es zum Speichern der erforderlichen Schlüssel-Wert-Paare in der Profilklasse verwendet werden:
<code class="language-csharp">public class ConfigFile { ... public SerializableDictionary<string, string> mappedDrives = new SerializableDictionary<string, string>(); ... }</code>
Mit diesem Ansatz können Konfigurationsdateiklassen serialisiert und deserialisiert werden, ohne dass Serialisierungsfehler auftreten.
Das obige ist der detaillierte Inhalt vonWie serialisiere ich ein Wörterbuchmitglied in einer Klasse für Konfigurationsdateien?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!