gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:53:37 25 4
gpt4 key购买 nike

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

最佳答案

当前 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);

你可以在这里看到一个工作示例: https://dotnetfiddle.net/2yCM2K

关于c# - 如何在C#中的Yaml文件末尾删除3个点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59338063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com