我想用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;
答案 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"]