Обычно я использую SQL Server или Oracle для хранения, поэтому сериализация в XML для меня немного нова.У меня были проблемы с поиском ответов, которые отражают то, что я делаю достаточно для того, чтобы понять, что я сделал неправильно.
У меня есть объект MyObject
, и он имеет несколько свойств.это serializable
.Мне нужно хранить IEnumerable<MyObject>
в XML-файл.Этот файл перезаписывается новым списком при сохранении, а при чтении необходимо снова читать прямо в IEnumerable<MyObject>
.
Мне удалось подавить декларацию XML, и все прекрасно работает с записями после первой, но я застрял в том, как сохранить это так, чтобы я мог прочитать его обратно.Существующий код (частично из поиска здесь):
foreach (var i in items)
{
bool append = File.Exists(fileName);
using (var file = new StreamWriter(fileName,append))
{
///don't add XML declarative headers if the file already exists.
if (append == true)
{
///check to see if the
var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
var settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
using (var writer = XmlWriter.Create(file, settings))
{
xml.Serialize(writer, i, emptyNamespaces);
}
}
else
{
xml.Serialize(file, i);
//append = true;
}
}
}
Очевидно, я перебираю список, и только первый элемент имеет информацию заголовка XML.Проблема в том, что я получаю несколько корневых узлов таким образом.если я создаю новый корневой узел вручную, я не могу выполнить сериализацию обратно до MyObject
>, потому что он не соответствует свойству или классу.Какой подход я должен использовать, чтобы иметь возможность сериализовать и десериализовать этот список объектов?