У меня есть класс настроек. У класса есть список времен повторного подключения соединения. В конструкторе установлен набор времени повторного подключения, который может быть изменен пользователем. Когда они изменяются, и класс сериализован на файл, он хранит только новые значения. Однако, когда он десериализует файл, значения в файле являются добавлены к набору значений по умолчанию в конструкторе. Есть ли способ сказать XmlSerializer на значения по умолчанию на то, что поступают из потока.
[XmlRoot("ConnectionSettings")]
public class ConnectionSettings
{
public ConnectionSettings()
{
ConnectTimeoutInSeconds = 5;
ReconnectSequenceInSeconds = new List() { 1, 5, 5, 20, 20, 60 };
}
[XmlElement("ConnectTimeoutInSeconds")]
public int ConnectTimeoutInSeconds { get; set; }
[XmlArray("ReconnectSequence")]
[XmlArrayItem("ReconnectTimeInSeconds")]
public List ReconnectSequenceInSeconds { get; set; }
public void Save(string file)
{
using (Stream writer = new FileStream(file, FileMode.Create))
{
var serializer = new XmlSerializer(typeof(ConnectionSettings));
serializer.Serialize(writer, this);
}
}
public static ConnectionSettings Load(string file)
{
using (Stream reader = new FileStream(file, FileMode.Open, FileAccess.Read))
{
var serializer = new XmlSerializer(typeof(ConnectionSettings));
return serializer.Deserialize(reader) as ConnectionSettings;
}
}
}
< /code>
Простой тест: < /p>
static void SaveAndLoad(string file)
{
var settings = new ConnectionSettings()
{
ConnectTimeoutInSeconds = 20,
ReconnectSequenceInSeconds = new List() { 30, 45, 60 }
};
Console.WriteLine("Desired outcome: " + string.Join(",", settings.ReconnectSequenceInSeconds));
settings.Save(file);
var loadedSettings = ConnectionSettings.Load(file);
Console.WriteLine("Actual outcome: " + string.Join(",", loadedSettings.ReconnectSequenceInSeconds));
}
< /code>
Тест вывод: < /p>
Desired outcome: 30,45,60
Actual outcome: 1,5,5,20,20,60,30,45,60
Подробнее здесь: https://stackoverflow.com/questions/742 ... ppend-to-a