feat: added primitive serialization

This commit is contained in:
2025-04-17 22:21:12 +03:00
parent c205e710bc
commit eb454a471c
15 changed files with 454 additions and 189 deletions

View File

@@ -1,3 +1,4 @@
using System.Reflection;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
@@ -5,24 +6,47 @@ namespace Syntriax.Engine.Serialization;
public static class Serializer
{
private static readonly ISerializer serializer = new SerializerBuilder()
.WithNamingConvention(PascalCaseNamingConvention.Instance)
.DisableAliases()
.WithTypeConverter(new EntityConverter())
.WithTypeConverter(new Vector2DConverter())
.Build();
private static readonly ISerializer serializer = GetSerializer();
private static ISerializer GetSerializer()
{
SerializerBuilder serializerBuilder = new SerializerBuilder()
.WithNamingConvention(PascalCaseNamingConvention.Instance)
.DisableAliases();
private static readonly IDeserializer deserializer = new DeserializerBuilder()
.WithNamingConvention(PascalCaseNamingConvention.Instance)
.WithTypeConverter(new EntityConverter())
.WithTypeConverter(new Vector2DConverter())
.Build();
foreach (IEngineTypeYamlConverter typeConverter in GetEngineYamlTypeConverters())
serializerBuilder = serializerBuilder.WithTypeConverter(typeConverter);
return serializerBuilder.Build();
}
private static readonly IDeserializer deserializer = GetDeserializer();
private static IDeserializer GetDeserializer()
{
DeserializerBuilder serializerBuilder = new DeserializerBuilder()
.WithNamingConvention(PascalCaseNamingConvention.Instance);
foreach (IEngineTypeYamlConverter typeConverter in GetEngineYamlTypeConverters())
serializerBuilder = serializerBuilder.WithTypeConverter(typeConverter);
return serializerBuilder.Build();
}
private static IEnumerable<IEngineTypeYamlConverter> GetEngineYamlTypeConverters()
{
foreach (Type type in Assembly.GetExecutingAssembly().GetTypes().Where(t => typeof(IEngineTypeYamlConverter).IsAssignableFrom(t) && t.IsClass && !t.IsAbstract))
yield return (Activator.CreateInstance(type) as IEngineTypeYamlConverter)!;
}
public static string Serialize(object instance)
{
return serializer.Serialize(instance);
}
public static object Deserialize(string yaml)
{
return deserializer.Deserialize(yaml)!;
}
public static T Deserialize<T>(string yaml)
{
return deserializer.Deserialize<T>(yaml);