序列化包含字典成员的类

序列化包含字典成员的类

扩展到我的早期问题,我决定序列化我的config文件类,它运行得很好。

我现在想要存储要映射的驱动器字符的关联数组(键是驱动器字母,值是网络路径),并尝试使用DictionaryHybridDictionary,和Hashtable但是,在调用时总是会收到以下错误ConfigFile.Load()ConfigFile.Save():

反映类型‘App.ConfigFile’时出错。[Snip]System.NotSupportdException:无法序列化成员App.Configfile.mempdDrives[Snip]

根据我所读过的字典和HashTables可以被序列化,那么我做错了什么呢?

[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();
            }
        }
    }}


慕容708150
浏览 277回答 3
3回答

慕标5832272

创建序列化代理项。例如,您有一个类,它的公共属性为Dictionary类型。要支持这种类型的XML序列化,请创建一个泛型键值类:public&nbsp;class&nbsp;SerializeableKeyValue<T1,T2>{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;T1&nbsp;Key&nbsp;{&nbsp;get;&nbsp;set;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;T2&nbsp;Value&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}}向原始属性添加XmlIgnore属性:&nbsp;&nbsp;&nbsp;&nbsp;[XmlIgnore] &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Dictionary<int,&nbsp;string>&nbsp;SearchCategories&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}公开一个数组类型的公共属性,该属性包含一个SerializableKeyValue实例数组,用于序列化并反序列化为SearchCollection属性:&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;SerializeableKeyValue<int,&nbsp;string>[]&nbsp;SearchCategoriesSerializable &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;list&nbsp;=&nbsp;new&nbsp;List<SerializeableKeyValue<int,&nbsp;string>>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(SearchCategories&nbsp;!=&nbsp;null) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.AddRange(SearchCategories.Keys.Select(key&nbsp;=>&nbsp;new&nbsp;SerializeableKeyValue<int,&nbsp;string>() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{Key&nbsp;=&nbsp;key,&nbsp;Value&nbsp;=&nbsp;SearchCategories[key]})); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;list.ToArray(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SearchCategories&nbsp;=&nbsp;new&nbsp;Dictionary<int,&nbsp;string>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(var&nbsp;item&nbsp;in&nbsp;value) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SearchCategories.Add(&nbsp;item.Key,&nbsp;item.Value&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP