我有一个深度嵌套的对象模型:
public class CheatSheet {
public string Leader { get; set; }
public List<Section> Sections { get; set; }
}
public class Section {
public string Title { get; set; }
public List<SubSection> SubSections { get; set; }
}
public class SubSection {
public string Title { get; set; }
public List<Cheat> Cheats { get; set; }
}
public class Cheat {
public string Affected { get; set; }
public string Text { get; set; }
public string Hint { get; set; }
public string Url { get; set; }
}
我已经将它序列化为 YAML,没有任何问题:
var serializer = new YamlDotNet.Serialization.Serializer();
var sb = new StringBuilder();
var sw = new StringWriter(sb);
serializer.Serialize(sw, model);
string yaml = sb.ToString();
yaml 看起来不错,非常类似于 JSON 或 HJSON 表示。
我现在想反序列化它 - nb 我想将它反序列化为动态对象而不是原始模型(仅在此示例中首先用于生成 YAML,它不会存在于最终程序集中) .
var sr = new StringReader(yaml);
var deserializer = new YamlDotNet.Serialization.Deserializer();
dynamic expando = deserializer.Deserialize<ExpandoObject>(sr);
问题是生成的 expando 很难使用,包含许多不必要的嵌套级别。例如:
expando.Sections[0]["Title"]
expando.Sections[0]["SubSections"][0]["Title"]
expando.Sections[0]["SubSections"][0]["Cheats"][0]["Text"]
但我希望这是
expando.Sections[0].Title
expando.Sections[0].SubSections[0].Title
expando.Sections[0].SubSections[0].Cheats[0].Text
这有可能吗?
在项目 Gitcheatsheet.TestHarness 中的https://github.com/PhilipDaniels/Lithogen提供了一个重现程序 ,提交 2db9a0491e8ab50bb07aee552ddec6697c4b8bfc