ApplicationSettings
안에 C# 프로그램에 사용 된 몇 가지 공통 설정을 저장합니다. 대부분의 설정은 문자열이지만 그 중 하나는 StringCollection
입니다.SettingsPropertyValue.SerializedValue는 지역 변수를 통해 변수를 보지 않는 한 null입니다.
아래 표시된 것처럼 Properties.Settings.Default
의 기본 설정을 반복하고이를 매개 변수로 보내기 위해 사전에 추가하는 일부 코드에서 예외가 발생합니다.
// Generate parameters
Dictionary<string, string> signalparams = new Dictionary<string, string>();
// Add parameters
foreach (SettingsProperty property in Properties.Settings.Default.Properties)
{
SettingsPropertyValue value = new SettingsPropertyValue(property);
if (value.Property.SerializeAs == SettingsSerializeAs.Xml)
{
// Here's where the error occurs
signalparams.Add(value.Name, value.SerializedValue.ToString());
}
else if (value.Property.SerializeAs == SettingsSerializeAs.String)
{
signalparams.Add(value.Name, value.PropertyValue.ToString());
}
}
문자열 설정 미세 첨가되지만, 그것은 StringCollection
도달하면 (정확하게) 속성이 SerializeAs == SettingsSerializeAs.Xml
이 있는지 평가한다. 그러나 SerializedValue
은 null이므로 ToString()
이 예외를 throw합니다.
이상한 것은 디버거를 실행할 때 나는 지역 주민 창에 value
변수의 속성을 확인하려고 때까지 SerializedValue
가 null이다. 이 시점에서 SerializedValue
에는 StringCollection
에 대한 올바른 XML serialize 된 형식이 포함되어 있으며 프로그램은 정상적으로 처리됩니다.
왜 이런 일이 발생합니까?
감사합니다.지금까지는 내가 보여준 것처럼 설정에서 객체를 가져 오지 않았습니다. 이전 설정을 수정하지 않고 직렬화 된 값을 가져 오려고합니다. 객체가 직렬화되지 않더라도'_ChangedSinceLastSerialized'의 기본값은'false'입니다. 그럼에도 불구하고 객체를 수동으로 직렬화하여이 문제를 해결했습니다. – voithos