当每个对象的根节点使用它的 ID 命名时,使用 YamlDotNet 反序列化 YAML?

Deserializing YAML using YamlDotNet when the root node of each object is named using it's ID?

我正在使用 C#,我有一个要反序列化的 YAML 文件。

我看过使用 YamlDotNet,看起来还不错,但我找不到如何处理这种情况。

我正在使用的 YAML 文本具有以下格式:

1:
    id: 1
    name: foo
2:
    id: 2
    name: foo

我希望它看起来像这样,但事实并非如此:

- id: 1
  name: foo
- id: 2
  name: foo

我当然可以通过遍历每个节点并手动创建数据对象实例,恢复到更手动地做所有事情,但似乎仍然应该有一种方法可以在处理时从 YamlDotNet 轻松使用这个烦人的数据结构。

我乐于接受有关 .NET 中其他 YAML 解析库的建议。

我在另一个 SO 问题中找到了答案:Seeking guidance reading .yaml files with C#

通过反序列化为 Dictionary<int, Item> 我可以成功处理这个数据结构。

deserializer.Deserialize<Dictionary<int, Item>>(textReader);

如果您使用列表作为您的编辑,您可以使用类似于以下的代码轻松反序列化该文件:

class MyObject {
    public int Id { get; set; }
    public string Name { get; set; }
}

var deserializer = new DeserializerBuilder()
     .WithNamingConvention(new CamelCaseNamingConvention())
     .Build();

var result = deserializer.Deserialize<List<MyObject>>(File.OpenText("myfile.yml"));

注意:我正在 phone 上打字,无法测试代码。应该大部分是正确的,但我没有测试过。