2016-10-20 4 views
0

I Retrofit bin mit mit Gson und ich habe ein Json Objekt gefällt: "Gebühren": [[0,0.26], [50000,0.24], [100000,0.22]] Wie deserialisiere ich es in ein Array von Tupel mit Gson. Etwas mag das.Deserialize Array von Tupel mit Gson

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

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

Antwort

0

Erste Anmerkung: Es ist besser, wenn wir MyClass wie folgt definieren. verwenden kleine 'f' statt

public MyClass { 
public List<MyTuple> fees; 
} 

Der folgende Code 'F' kann verwendet werden, um Ihre Zeichenfolge

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

Ihre Lösung funktioniert nicht, da ich eine Liste von Tupel haben. Jedes Tupel ist ein Array aus zwei Elementen mit zwei verschiedenen Objekttypen (Integer und Double). Irgendeine Idee? – h2nghia

+0

Haben Sie Kompilierungsfehler erhalten? oder die Daten werden nicht richtig deserialisiert? –

+0

Danke für Ihre Hilfe. Ich lerne schließlich, wie man einen kundenspezifischen Gson Deserializer benutzt, um ihn zu analysieren. – h2nghia

0

Erstellen Sie eine benutzerdefinierte Gson Deserializer löst mein Problem deserialisieren. Hier ist der Code:

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

Hier ist der Code für MyTupleDeserializer Klasse

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; 
    } 
}