Десериализация массивов с помощью Джексона

У меня есть что-то вроде клиента JSON-RPC, и у меня проблемы с десериализацией входящая строка json в мой объект java. Входящий формат json:

{"value":"xxxx","type":"xxxx"}

Объект, в который я хочу десериализоваться:

@JsonAutoDetect
@JsonDeserialize()
public class ReturnValue {

private Object value;
private String type;

@JsonCreator
public ReturnValue(@JsonProperty("value") String val, @JsonProperty("type") String type) {
    value = val;
    this.type = type;
}

...getters, setters...

Кажется, это работает нормально, если значение String, но если оно типа массива, оно выдает Исключение JsonMapping - невозможно десериализовать экземпляр java.lang.String из токена START_ARRAY для json вот так:

{\"value\":[8, 10], \"type\":\"[int]\"}

Код:

int[] arr = (int[])getReturnValue(jsonString).getValue();

Где getReturnValue ничего особенного:

    ObjectMapper om = new ObjectMapper();
    ReturnValue rv = null;
    rv = om.readValue(json, ReturnValue.class);
    return rv;

Другая проблема заключается в том, что я бы хотел, чтобы свойство type было типа Class, но это вызовет другое исключение отображения. Есть ли способ сделать это в Джексоне, или мне нужно самому конвертировать из строки в соответствующий класс. Спасибо за любой совет.

6
задан matt b 25 April 2011 в 13:57
поделиться