using System.Text.Json; using System.Text.Json.Serialization; namespace Prefab.Base; /// /// Serializes values as their logical names and deserializes by name or value. /// /// Enumeration type to convert. public class PrefabEnumJsonConverter : JsonConverter where TEnum : PrefabEnum { /// public override TEnum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => reader.TokenType switch { JsonTokenType.String => PrefabEnum.FromName(reader.GetString()!), JsonTokenType.Number => PrefabEnum.FromValue(reader.GetInt32()), _ => throw new JsonException($"Unsupported token type '{reader.TokenType}' for Prefab enum deserialization.") }; /// public override void Write(Utf8JsonWriter writer, TEnum value, JsonSerializerOptions options) => writer.WriteStringValue(value.Name); }