"System.Collections.Specialized.StringDictionary"유형의 사용자 범위 설정을 만들었습니다. 로컬 설정을 열 때마다 config에서 볼 수 있지만 비어 있습니다.StringDictionary가 사용자 설정으로 저장되지 않음
정확하게 저장하는 다른 사용자 설정이 있지만이 사전은 전혀 저장하지 않는 것 같습니다.
사전을 저장하려면 어떻게해야합니까?
"System.Collections.Specialized.StringDictionary"유형의 사용자 범위 설정을 만들었습니다. 로컬 설정을 열 때마다 config에서 볼 수 있지만 비어 있습니다.StringDictionary가 사용자 설정으로 저장되지 않음
정확하게 저장하는 다른 사용자 설정이 있지만이 사전은 전혀 저장하지 않는 것 같습니다.
사전을 저장하려면 어떻게해야합니까?
문제는 Dictionary
이 XML로 직렬화되지 않는다는 것입니다 (실제로는 그렇지만). 두 가지 옵션이 있습니다. 사전에 대한 고유 한 직렬화 방법을 지정하거나 속일 수 있습니다.
XML의 값을 읽거나 편집 할 필요가 없다면 [SettingSerializeAs(SettingsSerializeAs.Binary)]
특성을 설정에 추가 할 수 있습니다. 완료된 작업을 가져 오지만 신속하고 더러운 접근 방식입니다.
설정에서 StringDictionary
과 관련된 특정 문제 또는 해결 방법에 대해 알지 못하지만 문제가있는 부분을 무시하고 문자열로 작업 하시겠습니까? 데이터를 xml로 직렬화하거나 키/값으로 구분 된 문자열 만 (더 간단하게) 직렬화 할 수 있습니까? DbConnectionStringBuilder
은이 작업을 수행하는 간단한 방법을 제공합니다 (아래 참조).
토큰 화 된 문자열은 "abc = def; ghi = jkl"이지만 더 복잡한 데이터의 경우 자동으로 이스케이프 규칙 등을 처리합니다. 가치가있는 시도?
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;
}
}
을 참조하십시오. DbConnectionStringBuilder의 끔찍한 악용 사례입니다. – jgmjgm
XmlSerializable을 구현하지 않아서 사전이 저장되지 않습니다. 잘 모르겠지만 나에게 보인다.
예, Save()를 호출하려고합니다. 내 모든 다른 설정은 내 StringDictionary를 제외하고 정확하게 저장됩니다. –
직렬화 가능한 문자열 사전의 경우 http://stackoverflow.com/a/6194818/492336 – sashoalm