Как мне сериализовать и десериализовать этот IEnumerable <myObject>, чтобы несколько экземпляров хранились в одном файле XML? - PullRequest
0 голосов
/ 18 декабря 2018

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

...