feat: added primitive serialization
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user