Simplify Generic Method
You can define a mapping between Types and the Deserializers. You can do this for example like this:
public class GenericDeserializer&lt;T&gt; : IDeserializer&lt;T&gt;
{
    private readonly ImmutableDictionary&lt;Type, object&gt; _deserializers =
        new Dictionary&lt;Type, object&gt;
    {
        { typeof(double), Deserializers.Double },
        { typeof(float), Deserializers.Single },
        { typeof(int), Deserializers.Int32 },
        { typeof(long), Deserializers.Int64 },
        { typeof(Null), Deserializers.Null },
        { typeof(string), Deserializers.Utf8 },
        { typeof(byte[]), Deserializers.ByteArray },
    }.ToImmutableDictionary();
}

You can't use the IDeserializer&lt;T&gt; in the Dictionary's Value type parameter that's why it is an object.
Then all you need to do is to make a lookup call and try to cast the value to IDeserializer&lt;T&gt;
if (_deserializers.ContainsKey(typeof(T)))
{
    var deserializer = _deserializers[typeof(T)] as IDeserializer&lt;T&gt;;
    ...
}

If the type was found then you can make branching based on the isNull value:
if (_deserializers.ContainsKey(typeof(T)))
{
    var deserializer = _deserializers[typeof(T)] as IDeserializer&lt;T&gt;;
    var retVal = deserializer.Deserialize(data, isNull, context);
    return !isNull ? retVal : default;
}

If it is not found then you can use the JsonSerializer as your fallback.
return JsonSerializer.Deserialize&lt;T&gt;(data, new JsonSerializerOptions()
{
    PropertyNameCaseInsensitive = true
});


The final code would look like this:
public class GenericDeserializer&lt;T&gt; : IDeserializer&lt;T&gt;
{
    private readonly ImmutableDictionary&lt;Type, object&gt; _deserializers =
        new Dictionary&lt;Type, object&gt;
    {
        { typeof(double), Deserializers.Double },
        { typeof(float), Deserializers.Single },
        { typeof(int), Deserializers.Int32 },
        { typeof(long), Deserializers.Int64 },
        { typeof(Null), Deserializers.Null },
        { typeof(string), Deserializers.Utf8 },
        { typeof(byte[]), Deserializers.ByteArray },
    }.ToImmutableDictionary();

    public T Deserialize(ReadOnlySpan&lt;byte&gt; data, bool isNull, SerializationContext context)
    {
        if (_deserializers.ContainsKey(typeof(T)))
        {
            var deserializer = _deserializers[typeof(T)] as IDeserializer&lt;T&gt;;
            var retVal = deserializer.Deserialize(data, isNull, context);
            return !isNull ? retVal : default;
        }

        return JsonSerializer.Deserialize&lt;T&gt;(data, new JsonSerializerOptions()
        {
            PropertyNameCaseInsensitive = true
        });
    }
}