Sérialiser des classes C# avec des membres de dictionnaire : une solution simple
De nombreux développeurs ont du mal à sérialiser les classes C# contenant des dictionnaires en raison d'un malentendu courant concernant leur sérialisabilité. Contrairement à la croyance populaire, les dictionnaires peuvent être sérialisés efficacement. La clé est d'implémenter l'interface IXmlSerializable
.
Création d'un dictionnaire générique sérialisable
Une solution facilement disponible consiste à créer un dictionnaire générique qui implémente IXmlSerializable
. Cela permet une sérialisation transparente :
<code class="language-csharp">[XmlRoot("dictionary")] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable { // Implementation omitted for brevity }</code>
Intégration dans votre classe de configuration
Pour l'utiliser dans votre classe de configuration (par exemple, ConfigFile
), remplacez votre membre Dictionary
standard par ce SerializableDictionary
personnalisé :
<code class="language-csharp">public SerializableDictionary<string, string> mappedDrives = new SerializableDictionary<string, string>();</code>
Sérialisation et désérialisation : aucune modification nécessaire
Vos méthodes de sérialisation et de désérialisation existantes utilisant XmlSerializer
devraient fonctionner sans modification :
<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>
En implémentant IXmlSerializable
, le membre du dictionnaire est désormais entièrement sérialisable, éliminant ainsi les exceptions de sérialisation précédentes. Cela fournit une solution simple à un problème fréquemment rencontré.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!