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