我对C#很新,所以如果这个问题很容易回答,我会提前道歉...... 我有一个程序,它创建一些对象并将其属性写入文本文件(.txt)。 从这个文本文件中,它读取包含ID的每隔一行 - 并创建一堆带有这些ID的新对象。
我应该接受这些新对象,将它们添加到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
希望写入标题之前创建文件,并且我可以通过迭代填充它,但文件是空的。
我写入文件的方式有什么不对,或者可能是我如何设置有问题的类进行序列化?
谢谢!
答案 0 :(得分:1)
XmlWriterSettings
true
XmlWriter
,然后序列化。答案 1 :(得分:1)
有效XML文件应仅包含一个根元素。虽然如果删除重复的标头<?xml version="1.0" encoding="utf-8"?>
,您的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);
}