Expandiendo sobre mi problema anterior , he decidido (des) serializar mi clase de archivo de configuración que funcionó muy bien.
Ahora quiero almacenar una matriz asociativa de las letras de unidad que desea asignar (clave es la letra de unidad, el valor es la ruta de acceso a la red) y han tratado de utilizar Dictionary
, HybridDictionary
y Hashtable
para esto, pero siempre me sale el siguiente error al llamar ConfigFile.Load()
o ConfigFile.Save()
:
Se produjo un error al reflejar el tipo 'App.ConfigFile'. [snip] System.NotSupportedException: no se puede serializar el miembro App.Configfile.mappedDrives [snip]
Por lo que he leído, los diccionarios y HashTables se pueden serializar, entonces, ¿qué estoy haciendo mal?
[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();
}
}
}
}
DataContractSerializer
clase puede hacer eso. Solo la salida es un poco fea.