2016-10-20 6 views
0

Я использую Дооснащение с Gson и у меня есть объект Json любит это: "сборы": [[0,0.26], [50000,0.24], [100000,0.22]] Как десериализовать его в массив кортежей с помощью Gson. Что-то это нравится.Deserialize массив кортеж с Gson

public class MyClass{ 
    public List<MyTuple> Fees; 
} 

public class MyTuple{ 
    public int volume; 
    public double percentFee; 
} 

ответ

0

Первое замечание: лучше, если мы определим MyClass как следующее. использовать маленький «F» вместо

public MyClass { 
public List<MyTuple> fees; 
} 

Следующего код «F» может быть использована для десериализации вашей строки

Gson gson = new Gson(); 
MyClass myClass = gson.fromJson(jsonString, MyClass.class); 
+0

Ваше решение не работает, так как у меня есть список кортежей. Каждый кортеж представляет собой 2-элементный массив из 2 разных типов объектов (целых и двойных). Есть идеи? – h2nghia

+0

У вас возникли ошибки в компиляции? или данные не десериализуются должным образом? –

+0

Спасибо за помощь. Я, наконец, узнаю, как пользователь настраивает Gson Deserializer для его анализа. – h2nghia

0

Создания пользовательского Gson десериализатор решает мою проблему. Вот код:

GsonBuilder gsonBuilder = new GsonBuilder(); 
gsonBuilder.registerTypeAdapter(MyTuple.class, new MyTupleDeserializer()); 
Gson gson = gsonBuilder.create(); 
MyClass myClass= gson.fromJson(json, MyClass.class); 

Вот код для MyTupleDeserializer класса

private class MyTupleDeserializer implements JsonDeserializer<MyTuple> { 
    @Override 
    public MyTuple deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { 
     JsonArray tupleValues= json.getAsJsonArray(); 
     MyTuple myTuple= new MyTuple(); 
     myTuple.setVolume(tupleValues.get(0).getAsInt()); 
     myTuple.setPercentFee(tupleValues.get(1).getAsDouble()); 
     return myTuple; 
    } 
} 
Смежные вопросы