Пропустить заголовки XML при записи через итерацию в С#

Я очень новичок в С#, поэтому заранее извиняюсь, если на этот вопрос легко ответить... У меня есть программа, которая создает некоторые объекты и записывает их свойства в текстовый файл (.txt). Из этого текстового файла он считывает каждую другую строку, поскольку он содержит идентификатор, и создает кучу новых объектов с этими идентификаторами.

Я должен взять эти новые объекты, добавить их в List и записать их в файл XML. Теперь, учитывая, что я отказался от попытки добавления этих объектов (и каждого их индивидуальных свойств) в List поскольку я не могу заставить его работать, я пытаюсь просто получить эти объекты и записать их в XML.

Это соответствующий бит кода:

for (int i = 0; i <= 200; i += 2)
 {

 //Functions of IAnimal take int values so the string needs to be converted.
 int nooID = Convert.ToInt32(animalist[i]);

 //Create a new animal for every iteration and assign it the new ID/name.
 IAnimal nooanimal = new IAnimal();
 nooanimal.setID(nooID);
 nooanimal.setname(nooID);

System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(nooanimal.GetType());

using (StreamWriter streamWriter = System.IO.File.AppendText("animalist.xml"))
{
 serializer.Serialize(streamWriter, nooanimal);
}
}

Это работает, то есть создает XML файл и содержит все элементы, которые он должен содержать. Однако он выглядит так:

<!--?xml version="1.0" encoding="utf-8"?-->
<animal xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <id>300</id>
 <name>Animal_300</name>
</animal><!--?xml version="1.0" encoding="utf-8"?-->
<animal xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <id>301</id>
 <name>Animal_301</name>
</animal>

И я не могу открыть его правильно, потому что заголовок повторяется для каждого объекта. Я попытался создать файл перед тем, for надеяться, что он напишет заголовки и что я могу просто заполнить его через итерацию, но файл пуст. Что-то не так в том, как я пишу в файл, или, возможно, в том, как я настроил этот класс для сериализации? Благодарю!

2 ответа

Допустимый XML файл должен содержать только один корневой элемент. Хотя если вы удалите повторяющийся заголовок Ваш XML файл по-прежнему будет недействительным. Попробуй это:

List<ianimal> animals = new List<ianimal>();
for (int i = 0; i <= 200; i += 2)
{

 //Functions of IAnimal take int values so the string needs to be converted.
 int nooID = Convert.ToInt32(animalist[i]);

 //Create a new animal for every iteration and assign it the new ID/name.
 IAnimal nooanimal = new IAnimal();
 nooanimal.setID(nooID);
 nooanimal.setname(nooID);
 animals.Add(nooanimal);
}

System.Xml.Serialization.XmlSerializer serializer = 
 new System.Xml.Serialization.XmlSerializer(typeof(List<ianimal>));

using (StreamWriter streamWriter = System.IO.File.AppendText("animalist.xml"))
{
 serializer.Serialize(streamWriter, animals);
}
</ianimal></ianimal></ianimal>


  1. Создание пользовательских XmlWriterSettings
  2. Установите свойство OmitXmlDeclaration в true
  3. Создайте XmlWriter с этими настройками и выполните сериализацию.

licensed under cc by-sa 3.0 with attribution.