How do I read and write a C# string Dictionary to a file?

后端 未结 2 1601
日久生厌
日久生厌 2021-02-06 11:18

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

相关标签:
2条回答
  • 2021-02-06 11:25

    The simplest way to write Dictionary is to create a list of where every entry of the Dictionary is converted to an XElement. Then you create a root XElement where the list is the value of the root. The reason you want to use an XElement is because then you can use it's Save method to store it to disk as XML. Example doing that in a single line (where d is the Dictionary)

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

    To read the file into a Dictionary, use the Parse static method of XElement and pass to it the entire contents of the file, which can read with File.ReadAllText. Parse returns an XElement object, the root. You can then iterate of the Elements() of the root and convert it to a Dictionary. You can do this in a single line:

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

    Here's a version of the above wrapped in methods:

    public static void Store(IDictionary<string, string> d, string filename)
    {
        new XElement("root", d.Select(kv => new XElement(kv.Key, kv.Value)))
                    .Save(filename, SaveOptions.OmitDuplicateNamespaces);
    }
     public static IDictionary<string, string> Retrieve(string filename)
    {
        return XElement.Parse(File.ReadAllText(filename))
                       .Elements()
                       .ToDictionary(k => k.Name.ToString(), v => v.Value.ToString());
    }
    
    0 讨论(0)
  • 2021-02-06 11:34

    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

    0 讨论(0)
提交回复
热议问题