c# - .net 中的流式 XML 序列化

标签 c# .net xml serialization streaming

我正在尝试序列化一个非常大的 IEnumerable<MyObject>使用 XmlSerializer无需将所有对象保存在内存中。

IEnumerable<MyObject>其实很懒..

我正在寻找一种流媒体解决方案,它将:

  1. IEnumerable<MyObject>中取出一个对象 使用标准序列化将它序列化到底层流(我不想在这里手工制作 XML!)
  2. 丢弃内存中的数据并移动到下一个

我正在尝试使用这段代码:

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

但是我得到了多个 XML header 并且我无法指定根标记 <MyObjects>所以我的 XML 无效。

有什么想法吗?

谢谢

最佳答案

XmlWriter 类是用于生成 XML 的快速流式 API。它相当低级,MSDN 有一个 article关于使用 XmlWriter.Create() 实例化验证 XmlWriter。

编辑:链接已修复。以下是文章中的示例代码:

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

关于c# - .net 中的流式 XML 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/721537/

相关文章:

excel - 使用带有 MICROSOFT.ACE.OLEDB.12.0 的 Powershell 在 CSV XML XLS XLSX XLSM 之间进行转换

c# - 我需要在我的类构造函数中设置初始值吗?

c# - 是否有用于文件比较并返回添加、更改和删除行的可枚举集合的 .NET 库?

c# - 强制看不见的 PictureBox 加载图像

c# - 使用数据协定序列化程序序列化 IXmlSerialized 对象时,如何控制根元素命名空间和名称?

java - 工具栏小部件与 ScrollView 重叠

c# - WPF 级联组合框到文本框

c# - 无法将 Action<object, EventArgs> 转换为 EventHandler?

c# - 在新行中打印字符串 (C#)

.net - Entity Framework - 模型生成错误 : '' ', 十六进制值 0x1F,是无效字符