public override NullableOption <T> Read(ref Utf8JsonReader reader, Type _, JsonSerializerOptions options)
        {
            T?value;

            if (reader.TokenType == JsonTokenType.Null)
            {
                value = default(T?);
            }
            else
            {
                value = _valueConverter.Read(ref reader, typeof(T), options);
            }

            return(NullableOption <T> .Some(value));
        }
        public override void Write(Utf8JsonWriter writer, NullableOption <T> value, JsonSerializerOptions options)
        {
            if (!value.IsSome(out T? item))
            {
                throw new ArgumentNullException(nameof(value), $"Unable to serialize {NullableOption<T>.None}. Consider using {nameof(JsonIgnoreAttribute)} to avoid this.");
            }

            if (item is null)
            {
                writer.WriteNullValue();
            }
            else
            {
                _valueConverter.Write(writer, item, options);
            }
        }