У меня есть метод, который сериализует коллекцию в файл, используя XmlSerializer.
public void Save(List<RetryAttempt> retryAttempts)
{
FileStream fs = new FileStream(this.fileName, FileMode.Create);
try
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<RetryAttempt>));
xmlSerializer.Serialize(fs, retryAttempts);
}
catch (Exception ex)
{
LocalLogger.LogError("Unable to save retry information to xml file.", ex.ToString());
}
finally
{
fs.Close();
}
}
Затем у меня есть другой метод, который десериализует коллекцию обратно из файла
public List<RetryAttempt> GetRetryAttempts()
{
List<RetryAttempt> retryAttempts = new List<RetryAttempt>();
if (File.Exists(this.fileName))
{
FileStream fs = new FileStream(this.fileName, FileMode.Open);
try
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<RetryAttempt>));
retryAttempts = (List<RetryAttempt>)xmlSerializer.Deserialize(fs);
}
catch (Exception ex)
{
LocalLogger.LogError("Unable to read from retry xml file.", ex.ToString());
}
finally
{
fs.Close();
}
}
return retryAttempts;
}
Пока все хорошо (если только кто-то не обнаружит что-то явно не так с этим кодом ...). Однако мой тестовый модуль для этого теперь не проходит
[Test]
public void GetRetryAttempts_AttemptsExist_ListOfAttemptsReturned()
{
this.attempt = new RetryAttempt("1234", 4);
this.attempts = new List<RetryAttempt>() { attempt };
this.xmlStore = new XmlRetryFileStore(RetryType.Download);
xmlStore.Save(attempts);
List<RetryAttempt> savedAttempts = xmlStore.GetRetryAttempts();
Assert.Contains(attempt, savedAttempts);
}
Я бы ожидал, что список моего пользовательского объекта будет содержать «попытку», которую я сериализовал в файл. Вместо этого я получаю следующий сбой.
Ожидается: коллекция, содержащая
Но было:
Это сообщение, по-видимому, предполагает, что вместо возвращаемой коллекции был возвращен только один объект. Это, очевидно, не тот случай - есть возвращаемый List, который содержит только один элемент - я вижу коллекцию в ближайшем окне, и все выглядит хорошо. Я могу запустить тест с отладчиком, и все, кажется, в порядке. Если я просто создаю коллекцию и утверждаю, что она содержит элемент, не сохраняя и не получая его из XML, тогда он работает нормально, поэтому точка сбоя должна быть вокруг сериализации?