c# - 序列化到现有文件并删除声明

标签 c# xml xml-serialization

我有两个类需要在同一个 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,但它会覆盖我序列化的前一个类。

最佳答案

您的 XML 需要一个根元素才能成为有效的 XML。

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

您可以创建一个 List<Animal>并将其序列化。但是如果你没有相同的父类(super class),你可以尝试创建一个这样的类:

[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 并包含序列化的动物。

关于c# - 序列化到现有文件并删除声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10980652/

相关文章:

c# - 处理 (2 raise to n) -1 条件

c# - 从客户的网络摄像头上传照片

.net - 为 .net 类生成两个不同的 xml 序列化

c# - .NET 4.x 有重大更改 : Release mode does NOT execute static initializers properly if first call is to default ctor during deserialization

c# - 将 AddNLog 从 .NET Core 2.2 迁移到 3.0

c# - 处理 P/Invoking 时函数调用导致堆损坏的第 3 方库

android - 从 android 上的 SQLite 数据库填充 ListView

javascript - 从元数据中获取子节点的条目

php - xslt 1 和求和函数

c# - 从 XML 动态创建 WPF 控件并堆叠它们