【问题标题】:oneway IEnumerable processingoneway IEnumerable 处理
【发布时间】:2019-02-14 07:57:58
【问题描述】:

我有大量源(一些 IEnumerable 逐行通过 IDbReader),我需要序列化为 yaml 并反序列化。
如何避免收集内存中的所有项目?

【问题讨论】:

    标签: serialization yaml yamldotnet


    【解决方案1】:

    您应该能够直接使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-13
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      相关资源
      最近更新 更多