1
Fork 0
mirror of https://github.com/xivdev/EXDSchema.git synced 2025-06-06 16:17:46 +00:00
EXDSchema/SchemaConverter/SerializeUtil.cs

53 lines
No EOL
1.5 KiB
C#

using SharpYaml;
using SharpYaml.Events;
using SharpYaml.Serialization;
using SharpYaml.Serialization.Serializers;
namespace SchemaConverter;
public static class SerializeUtil
{
private static readonly Serializer _serializer;
static SerializeUtil()
{
var settings = new SerializerSettings
{
EmitAlias = false,
EmitDefaultValues = false,
NamingConvention = new CamelCaseNamingConvention(),
IgnoreNulls = true,
};
settings.RegisterSerializer(typeof(Dictionary<int, List<string>>), new CustomDictionarySerializer());
settings.RegisterSerializer(typeof(New.FieldType), new CustomFieldTypeSerializer());
_serializer = new Serializer(settings);
}
public static string Serialize(object o)
{
return _serializer.Serialize(o);
}
}
internal class CustomDictionarySerializer : DictionarySerializer
{
protected override void WriteDictionaryItem(ref ObjectContext objectContext, KeyValuePair<object, object?> keyValue, KeyValuePair<Type, Type> types)
{
objectContext.SerializerContext.WriteYaml(keyValue.Key, types.Key);
objectContext.SerializerContext.WriteYaml(keyValue.Value, types.Value, YamlStyle.Flow);
}
}
internal class CustomFieldTypeSerializer : ScalarSerializerBase
{
public override object? ConvertFrom(ref ObjectContext context, Scalar fromScalar)
{
return Enum.Parse<New.FieldType>(new PascalNamingConvention().Convert(fromScalar.Value));
}
public override string ConvertTo(ref ObjectContext objectContext)
{
return objectContext.Settings.NamingConvention.Convert(objectContext.Instance.ToString());
}
}