Ответ 1
Это "!" является "неспецифическим тегом".
спецификация YAML 1.2 остается (также 1.1):
Явным образом указывая "!" неспецифическое свойство тега, nodeзатем будет разрешено последовательность "vanilla", отображение или строку, в соответствии с его видом.
Посмотрите здесь в тег "grammar":
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, поэтому легко сравнивать источники.
Строка 2635 сканера .c(LibYAML):
/* Check if the tag is non-empty. */
if (!length) {
Линия 2146 сканера .cs(YamlDotNet):
// Check if the tag is non-empty.
if (tag.Length == 0)
Я знаю, оба выглядят очень похожими, но на данный момент length
равно 1 и tag.Length
равно 0. Исходный код C заботится об исходном "!" (целая длина), но С# не делает этого (просто длина тега "name" ).
Задайте проблему проекту.