Вы должны иметь возможность использовать Сериализатор напрямую для сериализации 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