如何解析yaml字符串

本文关键字:字符串 yaml 何解析 | 更新日期: 2023-09-27 18:20:28

我想在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字符串

问题中的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>