No conozco ningún problema específico ni ninguna solución para trabajar con StringDictionary
en la configuración, pero ¿tal vez el problema sea el siguiente y simplemente trabaje con una cadena? ¿Podría serializar los datos como xml o (quizás más simple) solo una cadena delimitada por clave/valor? Tenga en cuenta que DbConnectionStringBuilder
ofrece una forma sencilla de hacerlo (como se muestra a continuación).
La cadena de tokens es "abc = def; ghi jkl =", pero va a manejar de forma automática escapar reglas, etc. para los datos más complejos. ¿Vale la pena intentarlo?
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;
}
}
Sí, llamo Guardar(). Todas mis otras configuraciones están guardando correctamente excepto mi StringDictionary. –
Para un diccionario cadena serializable ver http://stackoverflow.com/a/6194818/492336 – sashoalm