gpt4 book ai didi

c# - XML 序列化程序不适用于属性

转载 作者:行者123 更新时间:2023-11-30 21:03:07 26 4
gpt4 key购买 nike

在我正在处理的代码中,有一些属性是序列化的。据我所知,它们都工作正常,但只有一个。这是代码:

    // Fields that the properties use.
private bool _useAlertColors = false;
private List<Int32> _colorArgb = new List<Int32>(new Int32[]{Color.White.ToArgb(), Color.Yellow.ToArgb(), Color.Red.ToArgb()});

// The one that does not work.
public List<Color> AlertColors
{
get
{
List<Color> alertColors = new List<Color>();

foreach (Int32 colorValue in _colorArgb)
{
alertColors.Add(Color.FromArgb(colorValue));
}

return alertColors;
}

set
{
// If there's any difference in colors
// then add the new color
for (int i = 0; i < _colorArgb.Count; i++)
{
if (_colorArgb[i] != value[i].ToArgb())
{
_colorArgb[i] = value[i].ToArgb();
HasChanged = true;
}

}
}
}

// One of those that work.
public bool UseAlertColors
{
get
{
return _useAlertColors;
}

set
{
if (_useAlertColors != value)
{
_useAlertColors = value;
HasChanged = true;
}
}
}

// Serializing method.
public bool Serialize(string filePath)
{
if (string.IsNullOrEmpty(filePath))
{
Logger.Log("Can't save settings, empty or null file path.");

return false;
}

FileStream fileStream = null;

try
{
fileStream = new FileStream(filePath, FileMode.Create);
FilePath = filePath;
System.Xml.Serialization.XmlSerializerFactory xmlSerializerFactory =
new XmlSerializerFactory();
System.Xml.Serialization.XmlSerializer xmlSerializer =
xmlSerializerFactory.CreateSerializer(typeof(Settings));

xmlSerializer.Serialize(fileStream, this);

Logger.Log("Settings have been saved successfully to the file " + filePath);
}
catch (ArgumentException argumentException)
{
Logger.Log("Error while saving the settings. " + argumentException.Message);

return false;
}
catch (IOException iOException)
{
Logger.Log("Error while saving the settings. " + iOException.Message);

return false;
}
finally
{
if (fileStream != null)
fileStream.Close();
}

return true;
}

序列化后,这就是我最终得到的:

  <UseAlertColors>true</UseAlertColors>
<AlertColors>
<Color />
<Color />
<Color />
</AlertColors>

AlertColors 属性有什么问题?为什么不连载?

编辑:我相应地更改了 AlertColors 属性,但它仍然无法正常工作:

    public List<int> AlertColors
{
get
{
return _colorArgb;
}

set
{
// If there's any difference in colors
// then add the new color
for (int i = 0; i < _colorArgb.Count; i++)
{
if (_colorArgb[i] != value[i])
{
_colorArgb[i] = value[i];
HasChanged = true;
}

}
}
}

我在 .xml 文件中得到的是这样的:

  <AlertColors>
<int>-1</int>
<int>-8355840</int>
<int>-65536</int>
</AlertColors>

_colorArgb 字段初始化时设置的第一个值。我可以看到程序执行期间字段发生变化,但是当覆盖属性被序列化时,它是用底层字段的初始值序列化的。

是什么导致了这个问题?

最佳答案

XMLSerializer 仅在序列化时使用类的公共(public)属性 - Color 类没有。

这是一个如何绕过它的好例子:http://www.codeproject.com/Articles/2309/NET-XML-Serialization-a-settings-class

关于c# - XML 序列化程序不适用于属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13044886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com