我正在使用YamlDotNet库,并且在加载YAML文件时遇到此错误:



YAML文件应该格式正确,因为它带有right from RoR。该错误似乎由以下代码触发:

formats:
  default: ! '%d-%m-%Y'
  long: ! '%d %B, %Y'
  short: ! '%d %b'

我不是专家,但是从YAML规范中可以看到,您可以使用感叹号指示自定义对象/类型,并使用两个感叹号指示显式内置类型。
obj1: !custom # whatever
obj2: !!str "My string"

但是,我无法找到对上述使用的感叹号的任何引用。这是什么意思,为什么我使用的YAML库似乎无法解析它?请注意,如果我删除了这些感叹号,该文件将被很好地解析。

最佳答案

那“!”是“非特定标签”。

YAML specification 1.2停留(也1.1):



看一下here标签“grammar”:



为什么YamlDotNet引发错误?我不能百分百确定,但是我认为您发现了一个错误。

YamlDotNet是LibYAML的端口,因此比较源很容易。

Scanner.c(LibYAML)的2635行:

/* Check if the tag is non-empty. */
if (!length) {

Scanner.cs的第2146行(YamlDotNet):
// Check if the tag is non-empty.
if (tag.Length == 0)

我知道,两者看起来非常相似,但是在这一点上length为1,而tag.Length为0。原始的C代码负责初始的“!”。 (全长),但C#不会这样做(只是标记“名称”的长度)。

向项目提交问题。

07-27 19:56