.net 一个感叹号在YAML中有什么作用?

.net 一个感叹号在YAML中有什么作用?,.net,parsing,tags,yaml,yamldotnet,.net,Parsing,Tags,Yaml,Yamldotnet,我正在使用库,在加载YAML文件时出现以下错误: 分析标记时,未找到预期的标记URI YAML文件应该是格式良好的,因为它来自。此错误似乎由以下代码触发: formats: default: ! '%d-%m-%Y' long: ! '%d %B, %Y' short: ! '%d %b' 我不是专家,但我从YAML规范中看到,可以使用感叹号表示自定义对象/类型,使用两个感叹号表示显式内置类型 obj1: !custom # whatever obj2: !!str "My str

我正在使用库,在加载YAML文件时出现以下错误:

分析标记时,未找到预期的标记URI

YAML文件应该是格式良好的,因为它来自。此错误似乎由以下代码触发:

formats:
  default: ! '%d-%m-%Y'
  long: ! '%d %B, %Y'
  short: ! '%d %b'
我不是专家,但我从YAML规范中看到,可以使用感叹号表示自定义对象/类型,使用两个感叹号表示显式内置类型

obj1: !custom # whatever
obj2: !!str "My string"
然而,我还没有找到任何关于上面使用的感叹号的引用。这意味着什么?为什么我使用的YAML库似乎无法解析它?请注意,如果我删除了这些感叹号,文件将被很好地解析。

即“!”是“非特定标记”

住宿(同时):

通过显式指定“!”非特定标记属性,节点 然后将解析为“普通”序列、映射或字符串, 根据它的种类

看看标签“语法”:

Scanner.cs(YamlDotNet)的第2146行:

我知道,两者看起来非常相似,但此时
length
为1,而
tag.length
为0。原始的C代码负责首字母“!”(整个长度),但C#不负责(只负责标记“name”长度)


向项目提交一个问题。

注释检查似乎可以解决问题,但我不知道它对其他构造的影响。无论如何,我在这个项目上提出了一个错误。这是否等同于将整个字符串用引号括起来,而不是在前面使用一个感叹号?规范的链接应该是固定的(1.1-链接到1.2,1.2-链接到1.1)。解释有点不透明。你有使用
的例子吗
(或您提到的任何变体)?我同意Burhan的观点,如果没有更多的YAML经验,这是不可能破译的。这个答案详细阐述了标签本身:
none    : Unspecified tag (automatically resolved by application).
'!'     : Non-specific tag (by default, "!!map"/"!!seq"/"!!str").
'!foo'  : Primary (by convention, means a local "!foo" tag).
'!!foo' : Secondary (by convention, means "tag:yaml.org,2002:foo").
'!h!foo': Requires "%TAG !h! <prefix>" (and then means "<prefix>foo").
'!<foo>': Verbatim tag (always means "foo").
/* Check if the tag is non-empty. */
if (!length) {
// Check if the tag is non-empty.
if (tag.Length == 0)