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

时间:2016-12-14 15:28:42

标签: c# yaml yamldotnet

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

我已经看过使用YamlDotNet了,它看起来很不错,但我找不到如何处理这种情况。

YAML对象采用以下格式:

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

理想情况下,这将是:

(编辑:根据Anthon的评论改变了理想的格式。)

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

但它不是......哦,好吧。

我当然可以通过循环遍历每个节点并手动创建数据对象实例来恢复手动操作,但似乎仍然有一种方法可以让YamlDotNet在处理这个烦人的同时轻松使用数据结构。

我愿意接受.net。

中其他YAML解析库的建议

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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"));

注意:我在手机上打字但无法测试代码。它应该是大多数正确但我没有测试过。