Jackson: serialize e desserialize valores de enum como números inteiros

Considere a seguinte enumeração e classe:

public enum State {
    ON,
    OFF,
    UNKNOWN
}

public class Machine {
    String name;
    int numCores;
    State state;

    public Machine(String name, int numCores, State state) {
        this.name = name;
        this.numCores = numCores;
        this.state = state;
    }
}

E considere a seguinte função principal:

public static void main(String args[]) {
    Machine m = new Machine("Machine 1", 8, OFF);
    ObjectMapper mapper = new ObjectMapper();
    String machineAsJsonString = mapper.writeValueAsString(m);
    System.out.println(machineAsJsonString);
}

Atualmente, a saída desse main é:

{"name" : "Machine 1", "numCores" : 8, "state" : "OFF"}

Esta saída não é boa para mim, pois em vez da string"OFF" parastate, Eu gostaria que fosse1, que é o valor ordinal deOFF no enumState.

Portanto, o resultado real que quero obter é:

{"name" : "Machine 1", "numCores" : 8, "state" : 1}

Existe alguma maneira elegante de fazê-lo se comportar dessa maneira?

questionAnswers(5)

yourAnswerToTheQuestion