Yaml对象列表

时间:2017-08-30 17:40:31

标签: c# serialization yaml

我想用yaml.dotnet

反序列化对象列表

您可以在下面看到我的YAML和源代码。

我得到错误,该课程不是我的课程对象的一部分。因此,编译器出于任何原因期望" Lesson"是班级的财产

代码:

var deserializer = new Deserializer();
var items = deserializer.Deserialize<List<YamlLesson>>(yaml);

YAML:

Lessons:
  - ShortKey: "M/A/L"
    Type: Static
    Items: ["M","A","M","L"]
  - ShortKey: "der/die/datas"
    Type: "random"
    Items: ["der","die","das"]

应该映射yaml的类

 public sealed class YamlLesson
    {
        public string ShortKey { get; set; }

        public string Type { get; set; }

        public List<string> Items { get; set; }
    }
}

异常

  

YamlDotNet.Core.YamlException:&#39;(Line:1,Col:1,Idx:0) - (行:1,   Col:1,Idx:0):预期&#39; SequenceStart&#39;,得到&#39; MappingStart&#39; (在   行:1,Col:1,Idx:0)。&#39;

1 个答案:

答案 0 :(得分:1)

嗯,错误是您告诉YamlDotNet您要反序列化为List<YamlLesson>,因此YamlDotNet期望您的YAML的根元素是序列。但是,您的YAML的根元素是映射:它有一个键Lessons和相应的值,即一系列课程。

这个YAML可以正确地反序列化到这个类中:

public class Root {
  public List<YamlLesson> Lessons { get; set; };
}

但是,如果要直接反序列化到List,只需删除根映射并将您的YAML更改为

- ShortKey: "M/A/L"
  Type: Static
  Items: ["M","A","M","L"]
- ShortKey: "der/die/datas"
  Type: "random"
  Items: ["der","die","das"]