2

我有两个类需要在同一个 xml 文件中。类的完成方式意味着我必须单独序列化。我已经设法做到了。我第一次使用 TextWriter。

TextWriter writer = new StreamWriter(filepath);
serializer.Serialize(writer, class, ns);

这工作正常。然后我想在文件中添加另一个类。也是如此,但补充说我想追加而不是覆盖。

TextWriter writer = new StreamWriter(filepath, true);

这会将新类添加到末尾,但还会添加另一个声明,以便读取我的 XML 文件。

<?xml version="1.0" encoding"utf-8"?>
<dog>
...
</dog>
<?xml version="1.0" encoding"utf-8"?>
<cat>
...
</cat>

我尝试使用 XmlWriter 所以我可以使用 XmlWriterSettings 然后为 OmitXmlDeclaration 选择 false 但它会覆盖我序列化的前一个类。

4

2 回答 2

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();
    }
}

在中ReadXmlWriteXml您可以使用通用序列化程序来序列化这些对象,然后使用 XmlWriter 编写一个 startElement。endElement 并包含序列化的动物。

于 2012-06-11T13:06:52.990 回答
0

您想要做的不是有效的 XML,因为它只能包含一个根元素。

您可以创建一个类来包含dogandcat并对其进行序列化。

于 2012-06-11T13:07:00.920 回答