使用 YamlDotNet 删除 yaml 文件的特定字段

Remove specific field of yaml file using YamlDotNet

我正在开发一个读取 yaml 文件的应用程序。假设 yaml 文件具有以下内容:

field1: 'test1'
field2: 'test2'
field3: 'test3'

所以我只想删除 filed2,这样新的 yaml 文件将是:

field1: 'test1'
field3: 'test3'

我如何使用 YamlDotNet 库来实现?

使用 YamlDotNet 进行反序列化和序列化可能如下所示:

const string yml = @"
    field1: 'test1'
    field2: 'test2'
    field3: 'test3'";

// deserialize yml into dictionary
var deserialized = new DeserializerBuilder()
    .Build()
    .Deserialize<Dictionary<string, string>>(yml);

// remove item with key = "field2"
deserialized.Remove("field2");

// serialize filtered dictionary to yml
var finalYml = new SerializerBuilder()
    .WithEventEmitter(nextEmitter => new QuoteSurroundingEventEmitter(nextEmitter))
    .Build()
    .Serialize(deserialized);

我们需要这个 class 用于 '

的周围值
public class QuoteSurroundingEventEmitter : ChainedEventEmitter
{
    private int _itemIndex;

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

    public override void Emit(ScalarEventInfo eventInfo, IEmitter emitter)
    {
        if (eventInfo.Source.StaticType == typeof(object) && _itemIndex++ % 2 == 1)
        {
            eventInfo.Style = ScalarStyle.SingleQuoted;
        }
        base.Emit(eventInfo, emitter);
    }
}

代码已使用 YamlDotNet 11.2.1 在 Core 5 控制台应用程序中进行测试。