Как получить деестериализацию C# xmlarray, а не добавить в список?C#

Место общения программистов C#
Ответить
Anonymous
 Как получить деестериализацию C# xmlarray, а не добавить в список?

Сообщение Anonymous »

У меня есть класс настроек. У класса есть список времен повторного подключения соединения. В конструкторе установлен набор времени повторного подключения, который может быть изменен пользователем. Когда они изменяются, и класс сериализован на файл, он хранит только новые значения. Однако, когда он десериализует файл, значения в файле являются добавлены к набору значений по умолчанию в конструкторе. Есть ли способ сказать 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»