【问题标题】:Remove specific field of yaml file using YamlDotNet使用 YamlDotNet 删除 yaml 文件的特定字段
【发布时间】:2021-09-29 06:42:25
【问题描述】:

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

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

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

field1: 'test1'
field3: 'test3'

我将如何使用 YamlDotNet 库来做到这一点?

【问题讨论】:

    标签: c# .net yamldotnet


    【解决方案1】:

    使用 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);
    

    我们需要这个类来包围'的值

    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 控制台应用程序中测试代码。

    【讨论】:

    • 非常感谢! :)
    猜你喜欢
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2011-11-30
    • 2015-09-13
    相关资源
    最近更新 更多