在我earlier problem岁的基础上,我决定(反)序列化我的配置文件类,它工作得很好.

现在,我希望存储要映射的驱动器号的关联数组(key是驱动器号,value是网络路径),并try 使用DictionaryHybridDictionaryHashtable来执行此操作,但在调用ConfigFile.Load()ConfigFile.Save()时总是出现以下错误:

反映类型时出错 "App.ConfigFile".[剪切] System.NotSupportdException:无法 序列化成员 App.Configfile.mappdDrives[Snip]

据我所知,字典和哈希表可以序列化,那么我做错了什么?

[XmlRoot(ElementName="Config")]
public class ConfigFile
{
    public String guiPath { get; set; }
    public string configPath { get; set; }
    public Dictionary<string, string> mappedDrives = new Dictionary<string, string>();

    public Boolean Save(String filename)
    {
        using(var filestream = File.Open(filename, FileMode.OpenOrCreate,FileAccess.ReadWrite))
        {
            try
            {
                var serializer = new XmlSerializer(typeof(ConfigFile));
                serializer.Serialize(filestream, this);
                return true;
            } catch(Exception e) {
                MessageBox.Show(e.Message);
                return false;
            }
        }
    }

    public void addDrive(string drvLetter, string path)
    {
        this.mappedDrives.Add(drvLetter, path);
    }

    public static ConfigFile Load(string filename)
    {
        using (var filestream = File.Open(filename, FileMode.Open, FileAccess.Read))
        {
            try
            {
                var serializer = new XmlSerializer(typeof(ConfigFile));
                return (ConfigFile)serializer.Deserialize(filestream);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.ToString());
                return new ConfigFile();
            }
        }
    }
}

推荐答案

不能序列化实现IDictionary的类.看看这个link.

问:为什么我不能序列化哈希表?

答:XmlSerializer无法处理

所以我认为你需要为这本词典创建自己的版本.判断这个other question.

.net相关问答推荐

有没有更好的方法使用 Pusher Channels 的批事件发布消息?

.NET Async / Await:状态机如何知道何时继续执行?

如何在 .net MAUI 中删除不需要编译的平台?

使用 PostAsJsonAsync C# 时出现错误请求

在 WP7 中将 List 转换为 ObservableCollection

将毫秒转换为人类可读的时间间隔

在c#中计算中位数

如何判断 IOException 是否为 Not-Enough-Disk-Space-Exception 类型?

如何在 C# 中创建表达式树来表示String.Contains("term")?

哪个单元测试框架?

静态代码块

控制台应用程序的退出时

运算符重载 ==, !=, Equals

System.String.Copy 在 .NET 中有什么用?

如何禁用 Alt + F4 关闭表单?

判断 .NET 中的目录和文件写入权限

如果锁定的对象内部发生异常,它会保持锁定状态吗?

/langversion 的错误选项6无效;必须是 ISO-1、ISO-2、3、4、5 或默认值

C# 应用程序中的资源和嵌入式资源有什么区别?

App.config:用户与应用程序范围