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