我想以这样的方式解析 C# 中的 yaml,以获得哈希表列表。
我正在使用 YamlDotNet。
这是我的代码:
TextReader tr = new StringReader(txtRawData.Text);
var reader = new EventReader(new MergingParser(new Parser(tr)));
Deserializer des = new Deserializer();
var result = des.Deserialize<List<Hashtable>>(tr);
它没有失败,但给了我一个空对象。
我的 YAML 就像:
- Label: entry
Layer: x
id: B35E246039E1CB70
- Ref: B35E246039E1CB70
Label: Info
Layer: x
id: CE0BEFC7022283A6
- Ref: CE0BEFC7022283A6
Label: entry
Layer: HttpWebRequest
id: 6DAA24FF5B777506
如何解析 YAML 并将其转换为所需的类型,而无需自己实现?
您问题中的 YAML 文档格式错误。每个键必须具有与前一个键相同的缩进。既然您提到代码不会失败,我将假设您正在解析的实际文档格式正确。
我能够使用以下代码成功解析文档:
var deserializer = new Deserializer();
var result = deserializer.Deserialize<List<Hashtable>>(new StringReader(yaml));
foreach (var item in result)
{
Console.WriteLine("Item:");
foreach (DictionaryEntry entry in item)
{
Console.WriteLine("- {0} = {1}", entry.Key, entry.Value);
}
}
这个小提琴表明代码可以工作。我已从代码中删除了第二行,因为它创建了一个从未使用过的对象。
此外,
Hashtable
可能不是您想要使用的。由于 .NET 中引入了泛型,因此使用 Dictionary
会更好。它的优点是类型安全。在这种情况下,您可以使用 Dictionary<string, string>
。