Fig*_*gör 6 android gson retrofit2
这是json架构:
如您所见,rating可以是boolean和object.
我正在使用Retrofit 2和Gson转换器.我该如何为这个模式创建我的模型?
我是这样解决这个问题的:
在模型中创建自定义类型适配器并手动解析评级;
public class AccountState {
//@SerializedName("rated") //NOPE, parse it manually
private Integer mRated; //also don't name it rated
public Integer getRated() {
return mRated;
}
public void setRated(Integer rated) {
this.mRated = rated;
}
public static class AccountStateDeserializer implements JsonDeserializer<AccountState> {
@Override
public AccountState deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
AccountState accountState = new Gson().fromJson(json, AccountState.class);
JsonObject jsonObject = json.getAsJsonObject();
if (jsonObject.has("rated")) {
JsonElement elem = jsonObject.get("rated");
if (elem != null && !elem.isJsonNull()) {
if(elem.isJsonPrimitive()){
accountState.setRated(null);
}else{
accountState.setRated(elem.getAsJsonObject().get("value").getAsInt());
}
}
}
return accountState ;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处使用此自定义适配器创建 gson:
final static Gson gson = new GsonBuilder()
.registerTypeAdapter(AccountState.class, new AccountState.AccountStateDeserializer())
.create();
Run Code Online (Sandbox Code Playgroud)
将其添加到改造中,如下所示:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BuildConfig.ENDPOINT)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.build();
Run Code Online (Sandbox Code Playgroud)
哒哒哒哒哒哒哒哒!
| 归档时间: |
|
| 查看次数: |
2482 次 |
| 最近记录: |