我试图使用IEnumerable<MyObject>序列化一个非常大的XmlSerializer,而不将所有对象保存在内存中。
IEnumerable<MyObject>实际上很懒。
我正在寻找一个流媒体解决方案,它将:
IEnumerable<MyObject>中获取对象
使用标准序列化将它序列化到底层流(我不想在这里手工制作XML!)
丢弃内存中的数据并移到下一个
我在尝试这个代码:

using (var writer = new StreamWriter(filePath))
{
 var xmlSerializer = new XmlSerializer(typeof(MyObject));
  foreach (var myObject in myObjectsIEnumerable)
  {
   xmlSerializer.Serialize(writer, myObject);
  }
}

但是我得到了多个xml头,无法指定根标记<MyObjects>,所以我的xml无效。
有什么想法吗?
谢谢

最佳答案

XmlWriter类是用于xml生成的快速流式api。这是相当低级的,msdn在使用XmlWriter.Create()实例化验证xmlwriter时有一个article
编辑:链接已修复。以下是文章中的示例代码:

async Task TestWriter(Stream stream)
{
    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Async = true;

    using (XmlWriter writer = XmlWriter.Create(stream, settings)) {
        await writer.WriteStartElementAsync("pf", "root", "http://ns");
        await writer.WriteStartElementAsync(null, "sub", null);
        await writer.WriteAttributeStringAsync(null, "att", null, "val");
        await writer.WriteStringAsync("text");
        await writer.WriteEndElementAsync();
        await writer.WriteCommentAsync("cValue");
        await writer.WriteCDataAsync("cdata value");
        await writer.WriteEndElementAsync();
        await writer.FlushAsync();
    }
}

10-04 23:00
查看更多