You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中使用YAML序列化器为顶级项间添加空行

在C#中实现YAML序列化时给顶级项之间添加空行

你可以借助YamlDotNet(C#生态最常用的YAML处理库)实现这个需求,虽然没有直接提供AddNewLinePerEveryNewItem()这类API,但通过自定义事件发射器(IEventEmitter)可以轻松实现顶级项间添加空行的效果。

步骤1:自定义事件发射器

创建一个继承自ChainedEventEmitter的类,拦截序列化事件并在顶级项结束后插入空行:

using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Serialization;

public class EmptyLineBetweenTopLevelItemsEmitter : ChainedEventEmitter
{
    private bool _isFirstTopLevelItem = true;

    public EmptyLineBetweenTopLevelItemsEmitter(IEventEmitter nextEmitter) : base(nextEmitter)
    {
    }

    public override void Emit(MappingStartEventInfo eventInfo, IEmitter emitter)
    {
        // 标记根级Mapping的开始,重置首次项标识
        if (eventInfo.Path.IsEmpty)
        {
            _isFirstTopLevelItem = true;
        }
        base.Emit(eventInfo, emitter);
    }

    public override void Emit(MappingEndEventInfo eventInfo, IEmitter emitter)
    {
        base.Emit(eventInfo, emitter);

        // 仅在非首个顶级项结束后添加空行
        if (!_isFirstTopLevelItem && eventInfo.Path.Length == 1)
        {
            emitter.Emit(new Scalar(string.Empty));
        }
        _isFirstTopLevelItem = false;
    }
}

步骤2:构建序列化器并使用

在创建Serializer时注入自定义发射器:

var yamlSerializer = new SerializerBuilder()
    .WithEventEmitter(next => new EmptyLineBetweenTopLevelItemsEmitter(next))
    .Build();

测试示例

序列化示例数据验证效果:

var testData = new Dictionary<string, object>
{
    ["first1"] = new { hello = true, world = true },
    ["there"] = new { a = true, b = true, c = true },
    ["first2"] = new { a = false }
};

var serializedYaml = yamlSerializer.Serialize(testData);
Console.WriteLine(serializedYaml);

输出结果会和你期望的「处理后(After)」完全一致:

first1:
  hello: true
  world: true

there:
  a: true
  b: true
  c: true

first2:
  a: false

前置依赖

如果还未安装YamlDotNet,通过NuGet安装:

# NuGet包管理器命令
Install-Package YamlDotNet

# .NET CLI命令
dotnet add package YamlDotNet

内容的提问来源于stack exchange,提问作者sunnamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:43:41