XML 파일에서 일부 설정을 deserialize하려고합니다. 문제가되는 속성/기본 필드는 AlertColors
입니다. 기본 필드를 흰색, 노란색 및 빨간색으로 초기화하여이 클래스의 새 인스턴스에 유효한 색상 설정이 있는지 확인합니다. 하지만 deserialize 할 때 _colorArgb
은 6 개의 값으로 끝나고, 처음 세 개는 초기화 값이고 마지막 세 개는 xml 파일에서 읽은 값입니다. 그러나 속성 AlertColors
은 필드에 추가하지 않지만 요소를 변경합니다. 왜 내가 6 가지 색으로 된 들판을 가지고 있을까?Xml deserialization이 목록에 추가됩니다.
private List<int> _colorArgb = new List<int>(new int[] { Color.White.ToArgb(), Color.Yellow.ToArgb(), Color.Red.ToArgb() });
public List<int> AlertColors
{
get
{
return _colorArgb;
}
set
{
for (int i = 0; i < Math.Min(_colorArgb.Count, value.Count); i++)
{
if (_colorArgb[i] != value[i])
{
HasChanged = true;
}
}
_colorArgb = value;
}
}
public bool Deserialize(string filePath)
{
if (!File.Exists(filePath))
{
Logger.Log("Error while loading the settings. File does not exist.");
return false;
}
FileStream fileStream = null;
try
{
fileStream = new FileStream(filePath, FileMode.Open);
System.Xml.Serialization.XmlSerializerFactory xmlSerializerFactory =
new XmlSerializerFactory();
System.Xml.Serialization.XmlSerializer xmlSerializer =
xmlSerializerFactory.CreateSerializer(typeof(Settings));
Settings deserializedSettings = (Settings)xmlSerializer.Deserialize(fileStream);
GetSettings(deserializedSettings);
Logger.Log("Settings have been loaded successfully from the file " + filePath);
}
catch (IOException iOException)
{
Logger.Log("Error while loading the settings. " + iOException.Message);
return false;
}
catch (ArgumentException argumentException)
{
Logger.Log("Error while loading the settings. " + argumentException.Message);
return false;
}
catch (InvalidOperationException invalidOperationException)
{
Logger.Log("Error while loading the settings. Settings file is not supported." +
invalidOperationException.Message);
return false;
}
finally
{
if (fileStream != null)
fileStream.Close();
FilePath = filePath;
}
return true;
}
protected void GetSettings(Settings settings)
{
AlertColors = settings.AlertColors;
}
내가 역 직렬화하고있어 XML 파일의 관련 부분 :
<AlertColors>
<int>-1</int>
<int>-15</int>
<int>-65536</int>
</AlertColors>
마찬가지로 : 현재 값이 {흰색, 흰색, 파란색} 인 경우 변경 감지를위한 반복이 실례 (흰색, 흰색)로 설정되지 않았 음을 알 수 있습니까? – Anton
그래, 나는 두 개의 값이 있다면 그것은 처음 두 개가 될 것이라고 생각했다. 사용자는 수동으로 어쨌든 변경해서는 안됩니다. – hattenn
관련 : http://stackoverflow.com/q/4217139/161052 – JYelton