序列化包含Dictionary成员的类
扩展我之前的问题,我决定对配置文件类进行反序列化,该类效果很好。
我现在想存储的驱动器号关联数组映射(关键是驱动器盘符,价值是网络路径)和使用都试过Dictionary
,HybridDictionary
和Hashtable
这个,但是打电话时,我总是得到下面的错误ConfigFile.Load()
或者ConfigFile.Save()
:
反映类型’App.ConfigFile’的错误。[snip]
System.NotSupportedException:无法序列化成员App.Configfile.mappedDrives [snip]
从我看过的书中可以将Dictionary和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();
}
}
}
}
回答:
您不能序列化实现IDictionary的类。查看此链接。
问:为什么我不能序列化哈希表?
答:XmlSerializer无法处理实现IDictionary接口的类。这部分是由于调度约束,部分是由于哈希表在XSD类型系统中没有对应项。唯一的解决方案是实现不实现IDictionary接口的自定义哈希表。
因此,我认为您需要为此创建自己的词典版本。检查另一个问题。
以上是 序列化包含Dictionary成员的类 的全部内容, 来源链接: utcz.com/qa/400297.html