1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-29 14:35:45 +00:00

Sérialize/déserialize yaml

This commit is contained in:
Yan Maniez 2019-01-17 13:17:57 +01:00
parent c490ea8854
commit 71d62d146f
2 changed files with 52 additions and 4 deletions

View file

@ -185,9 +185,29 @@ namespace AideDeJeuLib
[IgnoreDataMember]
[YamlIgnore]
public Dictionary<string, Type> ClassMapping = new Dictionary<string, Type>()
public static Dictionary<string, Type> ClassMapping = new Dictionary<string, Type>()
{
{ nameof(Generic), typeof(Generic) },
{ "Generic", typeof(Generic) },
{ "Monster", typeof(Monster) },
{ "MonsterHD", typeof(MonsterHD) },
{ "MonsterVO", typeof(MonsterVO) },
{ "Monsters", typeof(Monsters) },
{ "MonstersHD", typeof(MonstersHD) },
{ "MonstersVO", typeof(MonstersVO) },
{ "Spell", typeof(Spell) },
{ "SpellHD", typeof(SpellHD) },
{ "SpellVO", typeof(SpellVO) },
{ "Spells", typeof(Spells) },
{ "SpellsHD", typeof(SpellsHD) },
{ "SpellsVO", typeof(SpellsVO) },
{ "Equipment", typeof(Equipment) },
{ "Equipments", typeof(Equipments) },
{ "Item", typeof(Item) },
{ "Items", typeof(Items) },
{ "LinkItem", typeof(LinkItem) },
{ "MagicItem", typeof(MagicItem) },
{ "MagicItems", typeof(MagicItems) },
{ "PageItem", typeof(PageItem) },
};
[IgnoreDataMember]
@ -196,8 +216,12 @@ namespace AideDeJeuLib
{
get
{
var serializer = new SerializerBuilder()
.WithTagMapping($"!{nameof(MonsterHD)}", typeof(MonsterHD))
var builder = new SerializerBuilder();
foreach(var mapping in ClassMapping)
{
builder = builder.WithTagMapping($"!{mapping.Key}", mapping.Value);
}
var serializer = builder
.EnsureRoundtrip()
.WithNamingConvention(new PascalCaseNamingConvention())
.Build();
@ -214,5 +238,27 @@ namespace AideDeJeuLib
return $"---\n{Yaml}---\n{Markdown}";
}
}
public static Item ParseYamlMarkdown(string yamlmd)
{
var builder = new DeserializerBuilder();
foreach (var mapping in ClassMapping)
{
builder = builder.WithTagMapping($"!{mapping.Key}", mapping.Value);
}
var yamlDeserializer = builder
.WithNamingConvention(new PascalCaseNamingConvention())
.Build();
var parser = new Parser(new System.IO.StringReader(yamlmd));
parser.Expect<StreamStart>();
parser.Expect<DocumentStart>();
var post = yamlDeserializer.Deserialize(parser);
parser.Expect<DocumentEnd>();
//parser.MoveNext();
var item = post as Item;
item.Markdown = yamlmd.Substring(parser.Current.End.Index + 1);
return post as Item;
}
}
}

View file

@ -337,6 +337,8 @@ namespace AideDeJeuCmd
var yaml = serializer.Serialize(monsters);
var sr = new StringReader(yaml);
var deser = deserializer.Deserialize(sr);
var truc = Item.ParseYamlMarkdown(monsters.FirstOrDefault().YamlMarkdown);
Console.WriteLine(yaml);
}