我有两个类需要在同一个xml文件中。类的完成方式意味着我必须单独序列化。我设法做到了。我第一次使用TextWriter。
TextWriter writer = new StreamWriter(filepath);
serializer.Serialize(writer, class, ns);
这很好用。然后我想在文件中添加另一个类。所以做了同样但添加了我想附加不覆盖。
TextWriter writer = new StreamWriter(filepath, true);
这会将新类添加到end,但也会添加另一个声明,以便我的XML文件读取。
<?xml version="1.0" encoding"utf-8"?>
<dog>
...
</dog>
<?xml version="1.0" encoding"utf-8"?>
<cat>
...
</cat>
我尝试使用XmlWriter,因此我可以使用XmlWriterSettings然后为OmitXmlDeclaration选择false,但它会覆盖我序列化的前一个类。
答案 0 :(得分:1)
您的XML需要一个根元素才能成为有效的XML。
<?xml version="1.0" encoding"utf-8"?>
<animals>
<dog/>
<cat/>
<animals>
您可以创建List<Animal>
并对其进行序列化。但是如果你没有相同的超类,你可以尝试创建一个这样的类:
[Serializable]
public class AnimalCollection : IXmlSerializable
{
public void WriteXml(XmlWriter writer)
{
// Repeat for the Cat
writer.WriteStartElement("Dog");
XmlSerializer serializer = new XmlSerializer(TypeOf(Dog));
using (StringWriter stringWriter = new StringWriter())
{
serializer.Serialize(stringWriter, _dog);
string value = stringWriter.ToString();
writer.WriteRaw(value);
}
writer.WriteEndElement();
}
}
在ReadXml
和WriteXml
中,您可以使用通用序列化程序来序列化这些对象,然后使用XmlWriter编写startElement。 endElement并包含序列化动物。
答案 1 :(得分:0)
您要做的不是有效的XML,因为它只能包含一个根元素。
您可以创建一个包含dog
和cat
的类,并对其进行序列化。