两个月后:我尝试解析的 YAML(Eve Online blueprint.yaml)文件发生了很大变化,这也使得使用反序列化器解析变得更加容易。如果有人(无论出于何种原因)想查看代码,它会在https://github.com/hkraal/ParseYaml上更新
根据 Steve Wellens 的评论,我调整了代码以减少一次做的事情。错误本身并不重要。我在我的解决方案中创建了另一个项目(Example1)来测试我之前提到的在 aaubry.net 上找到的实际示例。
使用“动态”键时,它给了我同样的错误,这导致了我目前的结论:两者之间存在差异:
items:
- part_no: A4786
和
items:
part_no: A4786
第一个用于我(错误地)假设我可以应用于使用第二种语法的 .yaml 文件的示例中。
现在还有待了解如何使用 yaml 文件中使用的语法获取密钥的“子”元素......
在工作中使用 C# 时,我开始考虑一个很好的项目来了解该语言的各个方面,同时有一个直接的工作目标。但是,我在解析 Yaml 文件的项目中很早就遇到了我的第一面墙。我的目标是创建 YamlBlueprint.cs 中定义的 YamlBlueprint 对象列表,但我什至没有到达 Yaml 文件的末尾。
我在 github 上设置了一个测试用例来演示这个问题: https ://github.com/hkraal/ParseYaml
http://www.aaubry.net/page/YamlDotNet-Documentation-Loading-a-YAML-stream上的示例一直有效,直到我想循环遍历这些项目。根据我所看到的,我应该能够将 myKey 作为参数提供给 YamlScalarNode() 以访问它下面的项目。
var items = (YamlSequenceNode)mapping.Children[new YamlScalarNode(myKey)];
如果我这样做,我会收到以下错误:
An unhandled exception of type 'System.InvalidCastException' occurred in yamldotnet.exe
Additional information: Unable to cast object of type 'YamlDotNet.RepresentationModel.YamlMappingNode' to type 'YamlDotNet.RepresentationModel.YamlSequenceNode'.
当将“项目”作为参数传递给 YamlScalarNode() 时,它只是抱怨项目不存在,这是预期的。由于我不确定我的训练哪里出了问题,我希望就如何进一步排除故障提供一些帮助。