構造が事前にわからない任意の Yaml ファイルを読み取るアプリケーションがあります。YamlStream
およびその他のYamlNode
実装は、Yaml ファイル全体をトラバースできるため、便利であることがわかりました。ただし、ある時点でYamlNode
、通常はがYamlScalarNode
あり、そのノードをオブジェクトに逆シリアル化する YamlDotNet の機能を使用したいと考えています。どうやってやるの?
これは私が試したものです。これは醜く、明示的なタグを持つノードに対してのみ機能します (例: !!bool "true"
become true
、 but 1
become "1"
):
private T DeserializeNode<T>(YamlNode node)
{
if (node == null)
return default(T);
using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream))
using (var reader = new StreamReader(stream))
{
new YamlStream(new YamlDocument[] { new YamlDocument(node) }).Save(writer);
writer.Flush();
stream.Position = 0;
return new Deserializer().Deserialize<T>(reader);
}
}
私がまだ見つけていないより良い方法があるに違いありません。