11

ハッシュテーブルのリストを取得できるように、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);

失敗しませんが、null オブジェクトが返されます。

私のyamlは次のようなものです:

- Label: entry
  Layer: x
  id: B35E246039E1CB70
- Ref: B35E246039E1CB70
  Label: Info
  Layer: x
  id: CE0BEFC7022283A6
- Ref: CE0BEFC7022283A6
  Label: entry
  Layer: HttpWebRequest
  id: 6DAA24FF5B777506

自分で実装することなく、yaml を解析して目的の型に変換するにはどうすればよいですか?

4

1 に答える 1

15

質問の 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);
    }
}

このフィドルは、コードが機能することを示しています。使用されないオブジェクトを作成するため、コードから 2 行目を削除しました。

また、Hashtableおそらくあなたが使いたいものではありません。.NET ではジェネリックが導入されているため、.NET を使用する方がはるかに優れていますDictionary。タイプセーフであるという利点があります。この場合、 を使用できますDictionary<string, string>

于 2014-09-03T23:08:52.710 に答える