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

17.4k views Asked by At

I'm using C# and I have a YAML file I want to deserialize.

I've looked at using YamlDotNet, and it looks like it's pretty decent, but I can't find how to handle this situation.

The YAML text I am working with has the following format:

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

I wish it looked like this instead, but it doesn't:

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

I can of course revert to doing everything much more manually, by looping over each node and manually creating the data object instances, but it seems like there should still be a way to have the ease of use from YamlDotNet while handling this annoying data structure.

I'm open to suggestions for other YAML parsing libraries in .NET.

2

There are 2 answers

0
AudioBubble On BEST ANSWER

I found the answer in another SO question: Seeking guidance reading .yaml files with C#

By deserializing to Dictionary<int, Item> I can successfully handle this data structure.

deserializer.Deserialize<Dictionary<int, Item>>(textReader);
3
Antoine Aubry On

If you use a list, as your edit, you can deserialize that file easily using code similar to this:

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

Note: I am typing on a phone and can't test the code. It should be mostly correct but I haven't tested it.