【发布时间】:2019-02-14 07:57:58
【问题描述】:
我有大量源(一些 IEnumerable 逐行通过 IDbReader),我需要序列化为 yaml 并反序列化。
如何避免收集内存中的所有项目?
【问题讨论】:
标签: serialization yaml yamldotnet
我有大量源(一些 IEnumerable 逐行通过 IDbReader),我需要序列化为 yaml 并反序列化。
如何避免收集内存中的所有项目?
【问题讨论】:
标签: serialization yaml yamldotnet
您应该能够直接使用 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);
}
}
【讨论】: