GSON no llama a mi TypeAdapter para un tipo que es una interfaz

GSON parece estar haciendo algún tipo de truco cuando mira los campos internos de mis JavaBeans en lugar de usar la información de propiedad de acceso público. Desafortunadamente, esto no funcionará para nosotros porque nuestros frijoles creados mágicamente están llenos de campos privados que no quiero que se almacenen.

@Test
public void testJson() throws Exception
{
    Player player = new MagicPlayer(); //BeanUtils.createDefault(Player.class);
    player.setName("Alice");

    Gson gson = new GsonBuilder()
        .registerTypeAdapter(Player.class, new PlayerTypeAdapter())
        .create();

    System.out.println(gson.toJson(bean));
}

private static class PlayerTypeAdapter implements JsonSerializer<Player>
{
    @Override
    public JsonElement serialize(Player player, Type type,
                                 JsonSerializationContext context)
    {
        throw new RuntimeException("I got called, woohoo");
    }
}

public static interface Player //extends SupportsPropertyChanges
{
    public String getName();
    public void setName(String name);
}

// Simple implementation simulating what we're doing.
public static class MagicPlayer implements Player
{
    private final String privateStuff = "secret";
    private String name;

    @Override
    public String getName()
    {
        return name;
    }

    @Override
    public void setName(String name)
    {
        this.name = name;
    }
}

Esto da:

{"privateStuff":"secret","name":"Alice"}

Y, por supuesto, nunca llama a mi tipo de adaptador, lo que aparentemente hace que sea imposible obtener cualquier otro comportamiento.

Respuestas a la pregunta(3)

Su respuesta a la pregunta