Comment puis-je lire et à écrire en C# string Dictionnaire dans un fichier?

J'ai un Dictionnaire d'objet et je veux écrire sur le disque et être en mesure de le lire à partir du disque. Idéalement, j'aimerais éviter un 3ème partie les bibliothèques. Est-il une façon simple de le faire régulièrement C# 4?

RÉPONSE ACCEPTÉE.

Résumé:

OPTION 1 - à l'Aide de JavaScriptSerializer

Pour: Pas de 3ème partie de la bibliothèque nécessaire. Aussi, utilise plus moderne format, c'est à dire JSON

Contre: Difficile à lire (pas formaté. Aussi, a besoin de référence à moins couramment utilisés par le Système.Web.L'Extension de l'assemblée, même lorsque l'application n'a rien à voir avec le web.

Solution:

Écrire:

File.WriteAllText("SomeFile.Txt", new JavaScriptSerializer().Serialize(dictionary));

Lire:

var dictionary = new JavaScriptSerializer()
    .Deserialize<Dictionary<string, string>>(File.ReadAllText("SomeFile.txt"));

OPTION 2 - à l'Aide de Linq to Xml

Pour: Pas de 3ème partie de la bibliothèque nécessaire. N'a généralement pas besoin d'ajouter d'autres références. Facilement lisible.

Contre: XML n'est pas aussi souhaitable que quelque chose de plus moderne, tels que JSON.

Écrire:

new XElement("root", d.Select(kv => new XElement(kv.Key, kv.Value)))
            .Save(filename, SaveOptions.OmitDuplicateNamespaces);

Lire:

var dictionary = XElement.Parse(File.ReadAllText(filename))
                .Elements()
                .ToDictionary(k => k.Name.ToString(), v => v.Value.ToString());

OPTION 3 - Utilisation JSON.NET

Pour: lisible par l'Homme. Format moderne.

Contre: 3ème partie de la bibliothèque nécessaire.

Solution:

Écrire:

File.WriteAllText("SomeFile.Txt", JsonConvert.SerializeObject(dictionary));

Lire:

var dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>
    (File.ReadAllText("SomeFile.txt"));
Un simple sérialisation/désérialisation serait de travailler. Pour les anciens, à l'aide de JavaScriptSerializer est une seule ligne de code.
Vous pouvez également utiliser la sérialisation XML: web.archive.org/web/20100703052446/http://blogs.msdn.com/b/...
killermonkey50, je vous remercie. J'ai remarqué que les plus âgés intégré sérialiseur pour xml ne prend pas en charge les dictionnaires, de sorte que vous devez créer votre propre wrappers comme vous l'avez indiqué. Je pense que c'est mieux d'utiliser LINQ étant donné que le code est beaucoup plus petit, au moins pour le cas d'utilisation spécifiques dont je parle.
IDictionary n'est pas pris en charge par XmlSerializer.
Je sais, cette solution crée une Entrée de la classe et utilise des listes pour le stocker. Pas de la façon la plus élégante de le faire, mais il fonctionne.

OriginalL'auteur zumalifeguard | 2014-11-19