我有大量资源(有些IEnumerable
逐行通过IDbReader
),我需要序列化为yaml并反序列化。
如何避免收集所有项目在内存中?
答案 0 :(得分:0)
您应该能够直接使用Serializer来序列化IEnumerable。请确保在序列化器上禁用别名,并且别名应以流方式进行序列化,而无需先加载整个源:
var serializer = new SerializerBuilder()
.DisableAliases()
.Build();
您可以在下面的代码中看到此操作。它将序列化前100个项目,然后失败,但出现异常,但是您可以看到第一个项目已被序列化:
using System;
using YamlDotNet.Serialization;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var source = Enumerable.Range(1, 10000).Select(i => {
if(i == 100) throw new Exception("I'm done");
return new {
Index = i,
Title = "Item " + i
};
});
var serializer = new SerializerBuilder()
.DisableAliases()
.Build();
serializer.Serialize(Console.Out, source);
}
}
看到它在这里运行:https://dotnetfiddle.net/Rk1nrx