那!
是非特定标签。
YAML 规范 1.2(以及之前的1.1 )说:
通过明确指定“!” 非特定标签属性,然后节点将根据其类型被解析为“vanilla”序列、映射或字符串。
看看这里的标签“语法”:
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").
为什么 YamlDotNet 会抛出错误?我不能 100% 确定,但我认为你发现了一个错误。
YamlDotNet 是 LibYAML 的一个端口,因此很容易比较来源。
scanner.c (LibYAML) 的第 2635 行:
/* Check if the tag is non-empty. */
if (!length) {
Scanner.cs (YamlDotNet) 的第 2146 行:
// Check if the tag is non-empty.
if (tag.Length == 0)
我知道,两者看起来非常相似,但此时length
是 1 和tag.Length
0。原始 C 代码负责处理初始的“!” (全长)但 C# 不这样做(只是标签“名称”长度)。
向项目提交问题。