2017-08-30 132 views
0

我想反序列化对象的列表与yaml.dotnetYAML对象列表

您可以在下面看到我的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:“(行:1,柱:1,IDX:0) - (行:1, 山口:1,IDX:0):预期'SequenceStart',得到'MappingStart'(在 行:1,Col:1,Idx:0)。'

回答

1

好了,错误的是你告诉YamlDotNet要反序列化到一个List<YamlLesson>,所以YamlDotNet期待您的YAML的根元素是一个序列。但是,您的YAML的根元素是映射:它有一个键,Lessons和相应的值,即一系列课程。

这个YAML可以适当地反序列化到这个类:

但是,如果你想直接反序列化到列表中,只是下降的根源映射和改变你的YAML是

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