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

            using (var jsonDocument = JsonDocument.ParseValue(ref reader))
            {
                JsonProperty jsonProperty = GetJsonProperty();
                if (jsonProperty.Equals(default(JsonProperty)))
                {
                    throw new JsonException();
                }

                JsonProperty GetJsonProperty()
                => jsonDocument.RootElement.EnumerateObject().FirstOrDefault(e => e.Name.ToLowerInvariant() == TypePropertyName.ToLowerInvariant());

                return((T)JsonSerializer.Deserialize
                       (
                           jsonDocument.RootElement.GetRawText(),
                           Type.GetType(jsonProperty.Value.GetString()),
                           options
                       ));
            }
        }