深くネストされたオブジェクト モデルがあります。
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 表現に非常に似ています。
私は今それをデシリアライズしたい - 元のモデルではなく動的オブジェクトにデシリアライズしたい (これはこの例で最初に 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
これは何らかの方法で可能ですか?
コミット 2db9a0491e8ab50bb07aee552ddec6697c4b8bfc で、プロジェクト Gitcheatsheet.TestHarness のhttps://github.com/PhilipDaniels/Lithogenで利用可能な再現プログラムがあります。