如何使用 YamlDotNet 仅解析部分 YAML?

How do I parse only part of YAML using YamlDotNet?

假设我有以下 YAML:

config_one:
  name: foo
  stuff: value

config_two:
  name: bar
  random: value

我想有选择地将 config_one 解析为一个对象,我希望 config_two 被忽略:

class ConfigOne
{
  public string Name {get;set;}
  public string Stuff {get;set;}
}

我该怎么做?该文档非常缺乏,或者至少,它使用了很多对我来说意义不大的术语,因此我无法搜索此功能。

构建反序列化器时,添加 IgnoreUnmatchedProperties():

var deserializer = new DeserializerBuilder()
    .WithNamingConvention(UnderscoredNamingConvention.Instance)
    .IgnoreUnmatchedProperties()
    .Build();

这“指示反序列化器忽略不匹配的属性而不是抛出异常。”
Git Source

使用 Cinchoo ETL - 一个开源库,您可以使用带有 reader 对象的 YamlPath 加载选择性节点。

这是工作示例

string yaml = @"
config_one:
  name: foo
  stuff: value

config_two:
  name: bar
  random: value
";
using (var r = ChoYamlReader<ConfigOne>.LoadText(yaml)
    .WithYamlPath("config_one")
    )
{
    foreach (var rec in r)
        Console.WriteLine(rec.Dump());
}

或一个班轮代码

    Console.WriteLine(ChoYamlReader.DeserializeText<ConfigOne>(yaml, "config_one").FirstOrDefault().Dump());

输出:

-- ChoYamlReaderTest.Program+ConfigOne State --
        Name: foo
        Stuff: value

示例 fiddle:https://dotnetfiddle.net/oMzL3R

免责声明:我是该库的作者。