3

構造が事前にわからない任意の Yaml ファイルを読み取るアプリケーションがあります。YamlStreamおよびその他のYamlNode実装は、Yaml ファイル全体をトラバースできるため、便利であることがわかりました。ただし、ある時点でYamlNode、通常はがYamlScalarNodeあり、そのノードをオブジェクトに逆シリアル化する YamlDotNet の機能を使用したいと考えています。どうやってやるの?

これは私が試したものです。これは醜く、明示的なタグを持つノードに対してのみ機能します (例: !!bool "true"become true、 but 1become "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);
    }
}

私がまだ見つけていないより良い方法があるに違いありません。

4

1 に答える 1