当前位置:  开发笔记 > 编程语言 > 正文

StringDictionary不保存为用户设置

如何解决《StringDictionary不保存为用户设置》经验,为你挑选了2个好方法。

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

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

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



1> lc...:

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

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



2> Marc Gravell..:

我不知道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;
    }

}


这是对DbConnectionStringBuilder的可怕滥用.
推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有