假设具有以下表示服务器响应的参数化数据类:

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

我知道在运行时类型T是什么。 Moshi是否像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);
}

最佳答案

与Gson的TypeToken API相比,Moshi在Types上使用了工厂方法来获取Java类型。

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

然后,就像Gson的TypeAdapter一样,使用JsonAdapter来反序列化和序列化您的类型。

07-22 13:04