I have a Dictionary object and I want to write to disk and be able to read it from disk. Ideally I would avoid any 3rd party libraries. Is there a simple way to do this with regular C# 4?
ANSWER ACCEPTED.
Summary:
OPTION 1 - Using JavaScriptSerializer
Pros: No 3rd party library necessary. Also, uses more modern format, i.e. JSON
Cons: Difficult to read -- not formated. Also, does require reference to less commonly used System.Web.Extension assembly, even when the application has nothing to do with the web.
Solution:
Write:
File.WriteAllText("SomeFile.Txt", new JavaScriptSerializer().Serialize(dictionary));
Read:
var dictionary = new JavaScriptSerializer()
.Deserialize<Dictionary<string, string>>(File.ReadAllText("SomeFile.txt"));
OPTION 2 - Using Linq to Xml
Pros: No 3rd party library necessary. Typically doesn't require adding additional references. Easily readable.
Cons: XML is not as preferable as something more modern such JSON.
Write:
new XElement("root", d.Select(kv => new XElement(kv.Key, kv.Value)))
.Save(filename, SaveOptions.OmitDuplicateNamespaces);
Read:
var dictionary = XElement.Parse(File.ReadAllText(filename))
.Elements()
.ToDictionary(k => k.Name.ToString(), v => v.Value.ToString());
OPTION 3 - Use JSON.NET
Pros: Human readable. Modern format.
Cons: 3rd party library necessary.
Solution:
Write:
File.WriteAllText("SomeFile.Txt", JsonConvert.SerializeObject(dictionary));
Read:
var dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>
(File.ReadAllText("SomeFile.txt"));
Without a Third Party like JSON.Net, Use JavaScriptSerializer
:
File.WriteAllText("SomeFile.Txt", new JavaScriptSerializer().Serialize(dictionary));
Getting dictionary back from file:
var dictionary = new JavaScriptSerializer()
.Deserialize<Dictionary<string, string>>(File.ReadAllText("SomeFile.txt"));
Only thing to remember is to add reference to System.Web.Extensions
under project references and then you will be able to use JavaScriptSerializer
after using System.Web.Script.Serialization;
Or with JSON.Net you can serialize your dictionary to JSON and then write it to file and then deserialize it, like:
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("1", "Some value 1");
dictionary.Add("2", "Something");
Storing Dictionary in file:
string json = JsonConvert.SerializeObject(dictionary);
File.WriteAllText("SomeFile.Txt", json);
Getting Dictionary back from file:
Dictionary<string, string> previousDictionary =
JsonConvert.DeserializeObject<Dictionary<string, string>>
(File.ReadAllText("SomeFile.txt"));
For comparison between the two options see: JSON.NET JsonConvert vs .NET JavaScriptSerializer
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With