2016-05-12 6 views
0

Mein Webdienst gibt ein JSON-Wörterbuch zurück, das die ID und den Namen mehrerer Bereichsobjekte darstellt.Wie behandle ich ein Flat JSON-Wörterbuch mit Retrofit

{ 
    "1": "Range 1", 
    "2": "Range 2", 
    "3": "Range 3" 
} 

Ich verwende Nachrüstung mit Gson und würde die Antwort wie ein Array von Range-Objekte zu sein.

public class Range { 
    public Integer persistentId; 
    public String name; 
} 

Wie richte ich meine Antwortklasse ein, um damit umzugehen?

public interface ContentService { 
    @GET("/apiv2/release_range_data.json") 
    Call<RangeResponse> getRanges(); 
} 

public class RangeResponse { 
    public ArrayList<Range> ranges; 
} 

Benötige ich einen benutzerdefinierten Deserializer?

Antwort

1

Wie wäre es mit Map<String, String> und dann in eine Liste von Range konvertieren?

UPD

public class Range { 
    public Integer persistentId; 
    public String name; 
} 

public interface ContentService { 
    @GET("/apiv2/release_range_data.json") 
    Call<RangeResponse> getRanges(); 
} 

public class RangeResponse { 
    public Map<String, String> ranges; 

    public ArrayList<Range> getRanges() { 
     ArrayList<Range> result = new ArrayList<>(ranges.size()); 
     for(String id : ranges.keySet()) { 
      Range range = new Range(); 
      range.persistentId = Integer.parseInt(id); 
      range.name = ranges.get(id); 
      result.add(range); 
     } 
     return result; 
    } 
} 
+0

Können Sie ein Beispiel dafür, wie dies zu erreichen? – Hackmodford

+0

habe meine Antwort mit dem Beispiel aktualisiert –

+0

Das sieht gut aus. Aus irgendeinem Grund ist meine Karte jedoch null. – Hackmodford