public TEnum Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver)
        {
            if (reader.ReadIsNull())
            {
                return(null);
            }

            var name = reader.ReadString();

            return(SmartFlagEnum <TEnum, TValue> .FromName(name).FirstOrDefault());
        }
        public TEnum Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
        {
            if (MessagePackBinary.IsNil(bytes, offset))
            {
                readSize = 1;
                return(null);
            }

            var name = MessagePackBinary.ReadString(bytes, offset, out readSize);

            return(SmartFlagEnum <TEnum, TValue> .FromName(name).FirstOrDefault());
        }
        public override TEnum ReadJson(JsonReader reader, Type objectType, TEnum existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            switch (reader.TokenType)
            {
            case JsonToken.String:
                return(GetFromName((string)reader.Value));

            default:
                throw new JsonSerializationException($"Unexpected token {reader.TokenType} when parsing a smart flag enum.");
            }

            TEnum GetFromName(string name)
            {
                try
                {
                    return(SmartFlagEnum <TEnum, TValue> .FromName(name, false).FirstOrDefault());
                }
                catch (Exception ex)
                {
                    throw new JsonSerializationException($"Error converting value '{name}' to a smart flag enum.", ex);
                }
            }
        }
Example #4
0
        public override TEnum Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
        {
            switch (reader.TokenType)
            {
            case JsonTokenType.String:
                return(GetFromName(reader.GetString()));

            default:
                throw new JsonException($"Unexpected token {reader.TokenType} when parsing a smart flag enum.");
            }

            TEnum GetFromName(string name)
            {
                try
                {
                    return(SmartFlagEnum <TEnum, TValue> .FromName(name, false).FirstOrDefault());
                }
                catch (Exception ex)
                {
                    throw new JsonException($"Error converting value '{name}' to a smart flag enum.", ex);
                }
            }
        }