在 yamldotnet 序列化中的输出 yaml 中的空字符
本文关键字:字符 yaml 输出 yamldotnet 序列化 | 更新日期: 2023-09-27 18:36:31
我正在尝试使用 YamlDotNet 库来序列化一个可能包含以 cariage 返回开头的字符串的结构。当我序列化数据时,我有一个包含空字符的奇怪输出。
using (var writer = new StringWriter())
{
var yaml = new YamlStream();
var rootYamlNode = new YamlMappingNode();
yaml.Add(new YamlDocument(rootYamlNode));
rootYamlNode.Add("foo", "'nbar");
yaml.Save(writer, false);
Console.Write(writer.ToString());
Console.Write(string.Join(", ", Encoding.UTF8.GetBytes(writer.ToString()).Select(b => string.Format("{0:X2}", b)).ToArray()));
}
渲染为 :
foo: >2?-
bar
...
66, 6F, 6F, 3A, 20, 3E, 32, 00, 2D, 0D, 0A, 0D, 0A, 20, 20, 62, 61, 72, 0D, 0A, 2E, 2E, 2E, 0D, 0A
随着?
蜂鸣一个空字符。(十六进制序列是编码为 UTF-8 的输出中的字节值)
有关信息,我正在使用带有框架 3.5 的 Visual Studio 2008(以及迄今为止最新的 yamldotnet 版本 3.8.0,但框架 4.5 的 dotnetfiddle.net 显示了与 yamldotnet 3.8.0 相同的问题)
它看起来像一个错误,但我可能滥用了 api。
我的代码中是否有错误?
如果这是yamldotnet中的一个错误,有没有办法通过要求yamldotnet使用
"'nbar"
语法而不是>- ...
语法来格式化yaml?
作为参考,这里有一个指向显示问题的 dotnetfiddle.net 的链接: https://dotnetfiddle.net/jqVcL3
由于没有答案,我将提供该错误的解决方法,而不是对我自己的问题的正确回答。
我通过对YamlDotNet代码进行逆向工程进一步调查。在反向源中,有一个名为 YamlDotNet'Core'Emitter.cs
的文件,其中包含一个方法 WriteBlockScalarHints
.在该代码中的某处,有一个对模式字符串"{0}'0"
的引用。据我了解,'0
毫无意义,没有它,整个代码都可以正常工作。
鉴于此,我在整个代码中查找了其他'0
,但没有找到其他出现。
所以我认为这个'0
只是代码中的一个错字。
作为使我的代码正常工作的解决方法,我只是从输出中删除了每次出现的'0
,并且效果很好。
这是我在问题中发布的dotnetfiddle链接分支的链接,解决方法是:https://dotnetfiddle.net/fRnZPS(警告:此实现效率低下,不应用于大型yaml)