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:
parent
c490ea8854
commit
71d62d146f
2 changed files with 52 additions and 4 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue