StringDictionary不保存为用户设置

我已经创建了一个类型为“System.Collections.Specialized.StringDictionary”的用户范围设置。 每当我打开本地设置时,我都可以在配置中看到它,但它是空的。

我有其他正确保存的用户设置,但这个字典似乎根本没有保存。

为了获得字典保存,我需要做些什么吗?

问题是Dictionary没有序列化为XML(即使它真的应该)。 你有两个选择。 您可以为字典指定自己的序列化方法,也可以作弊。

如果您不关心能够读取/编辑XML中的值,则可以在[SettingSerializeAs(SettingsSerializeAs.Binary)]添加[SettingSerializeAs(SettingsSerializeAs.Binary)]属性。 完成工作,但这是快速而肮脏的方法。

我不知道在设置中使用StringDictionary任何具体问题或解决方法,但可能会解决问题并只使用字符串? 您可以将数据序列化为xml,或者(或许更简单)只是一个键/值分隔字符串? 请注意, DbConnectionStringBuilder提供了一种简单的方法(如下所示)。

标记化的字符串是“abc = def; ghi = jkl”,但它会自动处理转义规则等更复杂的数据。 值得一试?

 using System; using System.Collections.Specialized; using System.Data.Common; public static class Program { static void Main() { StringDictionary lookup = new StringDictionary(); lookup.Add("abc", "def"); lookup.Add("ghi", "jkl"); string foo = Serialize(lookup); Console.WriteLine(foo); StringDictionary bar = Deserialize(foo); foreach (string key in bar.Keys) { Console.WriteLine("{0}={1}", key, bar[key]); } } public static string Serialize(StringDictionary data) { if(data == null) return null; // GIGO DbConnectionStringBuilder db = new DbConnectionStringBuilder(); foreach (string key in data.Keys) { db[key] = data[key]; } return db.ConnectionString; } public static StringDictionary Deserialize(string data) { if (data == null) return null; // GIGO DbConnectionStringBuilder db = new DbConnectionStringBuilder(); StringDictionary lookup = new StringDictionary(); db.ConnectionString = data; foreach (string key in db.Keys) { lookup[key] = Convert.ToString(db[key]); } return lookup; } } 

字典未保存,因为没有工具XmlSerializable。 我不确定,但在我看来。