gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 02:18:23 25 4
gpt4 key购买 nike

我正在尝试序列化一个非常大的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com