我正在使用 YamlDotNet Nuget-package 在 C#/.Net Framework 中读取和写入 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/