public override T Read(
            ref Utf8JsonReader reader,
            Type typeToConvert,
            JsonSerializerOptions options)
        {
            if (reader.TokenType != JsonTokenType.StartObject)
            {
                throw new JsonException();
            }

            var newOptions = options.CopyWithoutConverters().Also(o =>
            {
                foreach (var item in options.Converters.Filter(v => v.GetType() != this.GetType()))
                {
                    o.Converters.Add(item);
                }
            });

            while (reader.Read())
            {
                if (reader.TokenType != JsonTokenType.PropertyName || reader.CurrentDepth != 1)
                {
                    continue;
                }

                var propertyName = reader.GetString();
                if (propertyName == "fields")
                {
                    if (reader.Read())
                    {
                        var json = JsonSerializer.Deserialize <T>(ref reader, newOptions);
                        while (reader.Read())
                        {
                            ;
                        }
                        return(json);
                    }
                }
                else
                {
                    continue;
                }
            }

            throw new JsonException();
        }
        public override void Write(
            Utf8JsonWriter writer,
            T value,
            JsonSerializerOptions options)
        {
            var newOptions = options.CopyWithoutConverters().Also(o =>
            {
                foreach (var item in options.Converters.Filter(v => v.GetType() != this.GetType()))
                {
                    o.Converters.Add(item);
                }
            });

            writer.WriteStartObject();
            writer.WritePropertyName("fields");
            JsonSerializer.Serialize(writer, value, newOptions);
            writer.WriteEndObject();
        }