2017-09-13 2 views
2

Angenommen haben folgende parametrisierte Daten Klasse eine Antwort des Servers darstellt:Moshi generischer Typ Adapter

public class SocketResponse<T> { 
    private String responseMessage; 
    private int responseCode; 
    private T entity; 
} 

ich zur Laufzeit wissen, welche Art T sein wird. unterstützt Moshi generischen Typ Adapter auf die gleiche Weise wie Gson tut? Mit Gson-ID machen Sie Folgendes, um dies zu analysieren.

Type typeA = new TypeToken<SocketResponse<MyResponseA>>(){}.getType(); 
SocketResponse<MyResponseA> responseA = getResponse("json", typeA); 

Type typeB = new TypeToken<SocketResponse<MyResponseB>>(){}.getType(); 
SocketResponse<MyResponseB> responseB = getResponse("json", typeB); 


private String getResponse(Type t){ 
    return gson.fromJson(response, type); 
} 

Antwort

0

Ich benutze meistens GSON aber vielleicht so etwas?

Type type = Types.newParameterizedType(SocketResponse.class, Object.class); 
JsonAdapter<SocketResponse<?>> jsonAdapter = moshi.adapter(type); 
+0

Fast, aber der Parameter ist MyResponseA oder MyResponseB (nicht Objekt) in der Beispielfrage. –

1

Moshi verwendet die Factory-Methoden auf Types Java-Typen im Gegensatz zu Gson der TypeToken API zu erhalten.

Type typeA = Types.newParameterizedType(SocketResponse.class, MyResponseA.class); 
JsonAdapter<SocketResponse<MyResponseA>> adapter = moshi.adapter(typeA); 

Verwenden Sie dann die JsonAdapter Ihre Art deserialisieren und serialisiert werden, genau wie Gson des TypeAdapter.