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); } } }
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); } } }