2016-08-10 2 views
1

Я пытаюсь сделать Gson для анализа значений без с плавающей точкой, как Longs, а не двойников, как это defaultly делает:Сделать Gson для анализа целых чисел, а не плавает

Gson gson = new GsonBuilder() 
      .registerTypeAdapter(Object.class, (JsonDeserializer<Object>) (json, type, context) -> { 
       // we don't want integer values to be parsed as floats 
       String value = json.getAsJsonPrimitive().getAsString(); 
       if (value.matches("\\d+")) { 
        return Long.valueOf(value); 
       } else { 
        return context.deserialize(json, type); 
       } 
      }).create(); 
... 
gson.fromJson(payload); 

Я просто хочу, чтобы проверить, погода значение содержит ., а если нет, проанализируйте его как Long. В противном случае используйте метод разбора по умолчанию.

Однако, когда я помещаю там точки останова, метод никогда не вызывается. Полагаю, что я неправильно зарегистрировал адаптер.

EDIT1: Json может содержать списки со строками, целыми числами, удвоениями и картами. Мне нужно общее решение.

EDIT2: Я также пробовал варианты .registerTypeAdapter(Number.class или .registerTypeAdapter(Double.class без эффекта. Все еще не вызван.

ответ

0

Я не мог найти лучшего способа, чем полностью переопределить функцию Gson. Это довольно хак, но никакое другое решение, по-видимому, не устраняет проблему:

Смежные вопросы