如何读取C#字符串字典并将其写入文件?

我有一个Dictionary对象,我想写入磁盘并能够从磁盘读取它。 理想情况下,我会避免任何第三方库。 使用常规C#4有一种简单的方法吗?

答案接受了。

摘要:

选项1 – 使用JavaScriptSerializer

优点:不需要第三方图书馆。 此外,使用更现代的格式,即JSON

缺点:难以阅读 – 没有形成。 此外,确实需要引用不太常用的System.Web.Extension程序集,即使应用程序与Web无关。

解:

写:

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

读:

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

选项2 – 使用Linq到Xml

优点:不需要第三方图书馆。 通常不需要添加其他引用。 易读。

缺点: XML不像更现代的JSON那样优先。

写:

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

读:

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

选项3 – 使用JSON.NET

优点:人类可读。 现代格式。

缺点:必要的第三方图书馆。

解:

写:

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

读:

 var dictionary = JsonConvert.DeserializeObject<Dictionary> (File.ReadAllText("SomeFile.txt")); 

如果没有像JSON.Net这样的第三方,请使用JavaScriptSerializer

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

从文件中获取字典:

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

唯一要记住的是在项目引用下添加对System.Web.Extensions引用,然后在using System.Web.Script.Serialization;之后就可以使用JavaScriptSerializer using System.Web.Script.Serialization;


或者使用JSON.Net,您可以将字典序列化为JSON,然后将其写入文件,然后反序列化,如:

 Dictionary dictionary = new Dictionary(); dictionary.Add("1", "Some value 1"); dictionary.Add("2", "Something"); 

在文件中存储字典:

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

从文件中获取字典:

 Dictionary previousDictionary = JsonConvert.DeserializeObject> (File.ReadAllText("SomeFile.txt")); 

有关两个选项之间的比较,请参阅: JSON.NET JsonConvert vs .NET JavaScriptSerializer

编写Dictionary的最简单方法是创建一个列表,其中Dictionary的每个条目都转换为XElement。 然后创建一个根XElement,其中列表是根的值。 您想要使用XElement的原因是因为您可以使用它的Save方法将其作为XML存储到磁盘。 在单行中执行此示例(其中d是Dictionary)

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

要将文件读入字典,请使用XElement的Parse静态方法并将文件的整个内容传递给它,该文件可以使用File.ReadAllText读取。 Parse返回一个XElement对象,即root。 然后,您可以迭代根的Elements()并将其转换为Dictionary。 您可以在一行中执行此操作:

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

这是上面包含的方法的一个版本:

 public static void Store(IDictionary d, string filename) { new XElement("root", d.Select(kv => new XElement(kv.Key, kv.Value))) .Save(filename, SaveOptions.OmitDuplicateNamespaces); } public static IDictionary Retrieve(string filename) { return XElement.Parse(File.ReadAllText(filename)) .Elements() .ToDictionary(k => k.Name.ToString(), v => v.Value.ToString()); }