2 か月後: 私が解析しようとした YAML (Eve Online blueprint.yaml) ファイルは大きな変更を加えたため、デシリアライザーを使用した解析もはるかに簡単になりました。(何らかの理由で) 誰かがコードを見たい場合は、https://github.com/hkraal/ParseYamlで更新されます。
Steve Wellens のコメントに基づいて、コードを調整して、一度に行うことを減らしました。エラー自体は問題ありませんでした。以前に参照した aaubry.net にある実際の例をテストするために、ソリューションに別のプロジェクト (Example1) を作成しました。
現在の結論につながる「動的」キーを使用すると、同じエラーが発生しました。次の違いがあります。
items:
- part_no: A4786
と
items:
part_no: A4786
最初のものは、2 番目の構文を使用している .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の例は、アイテムをループするまで機能します。私が見たものに基づいて、YamlScalarNode() にパラメーターとして myKey を渡して、その下の項目にアクセスできるはずです。
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() に渡すと、期待されるアイテムがそこにないという不平を言うだけです。私のタフトトレインがどこでうまくいかないのかわからないので、これをさらにトラブルシューティングする方法について少し助けていただければ幸いです。