2017-09-13 54 views
2

假設有一個表示服務器響應以下參數化的數據類:在運行時莫希通用型適配器

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

我知道什麼類型的T將。莫氏支持泛型類型適配器與Gson一樣嗎?用Gson id做下面的分析。

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

回答

0

我主要使用GSON,但也許是這樣的?

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

差不多,但參數是示例問題中的MyResponseA或MyResponseB(不是Object)。 –

1

莫希使用上Types工廠方法來獲得Java類型對比GSON的TypeToken API。

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

然後,使用JsonAdapter反序列化和序列化您的類型,就像Gson的TypeAdapter一樣。