如何在C#中删除Yaml文件末尾的3个点?

如何在C#中删除Yaml文件末尾的3个点?,c#,.net,yaml,file-processing,yamldotnet,C#,.net,Yaml,File Processing,Yamldotnet,我正在使用YamlDotNet Nuget包在C#/.Net框架中读写Yaml文件。在写入yaml文件时,它会在文件末尾创建3个点。因为这些点是可选的,所以我不想要它们。在创建yaml文件时是否有方法排除它们? 这是我的密码 using YamlDotNet.RepresentationModel; var input = new StreamReader(Constants.YamlFilePath); var yaml = new YamlStream

我正在使用YamlDotNet Nuget包在C#/.Net框架中读写Yaml文件。在写入yaml文件时,它会在文件末尾创建3个点。因为这些点是可选的,所以我不想要它们。在创建yaml文件时是否有方法排除它们? 这是我的密码

   using YamlDotNet.RepresentationModel;

        var input = new StreamReader(Constants.YamlFilePath);
        var yaml = new YamlStream(); 
        yaml.Load(input);
        input.Dispose();
        var config = ((YamlMappingNode)yaml.Documents[0].RootNode).Children["Configuration"];
        ((YamlMappingNode)yaml.Documents[0].RootNode).Children["Configuration"] = new YamlMappingNode
        {
            { "A1", data.A1 },
            { "A2", data.A2 },
            { "A3", data.A3 },
            { "A4", config["A4"].ToString() },
            { "A5", config["A5"].ToString() }
        };

        using (StreamWriter writer = new StreamWriter(Constants.YamlFilePath, false))
            yaml.Save(writer);

您可以创建一个内存流,进行写操作,然后将内存流中的字节写入文件


或者,您可以创建一个流编写器,在每次调用写入时写入除最后3个字节以外的所有字节。

当前
YamlStream
始终发出一个显式
DocumentEnd
事件,这就是为什么要写入点。您无法更改该行为,但可以编写自己的
IEmitter
以强制
DocumentEnd
事件隐式:

public class NoDotsEmitter : IEmitter
{
    private readonly IEmitter inner;

    public NoDotsEmitter(IEmitter inner)
    {
        this.inner = inner;
    }

    public void Emit(ParsingEvent @event)
    {
        if (@event is DocumentEnd documentEnd)
        {
            inner.Emit(new DocumentEnd(true));
        }
        else
        {
            inner.Emit(@event);
        }
    }
}
然后可以将此类的实例传递给Save方法:

var emitter = new NoDotsEmitter(new Emitter(writer));
yaml.Save(emitter, false);
您可以在此处看到一个工作示例: