大佬教程收集整理的这篇文章主要介绍了android – 带有Retrofit转换器的Gson反序列化器:只需要内部JSON用于所有响应,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
{ "stuff_i_need": [ { "title": "Hello" },{ "title": "World!" } ],"status": "success" }
和
{ "other_things_key": { "version": "208" },"status": "success" }
总有两个元素,我只需要一个不是“状态”的元素.
我想用一个GsonBuilder来做这个.
我试过了:
new GsonConverter(new GsonBuilder() .registerTypeAdapter(List.class,new JsonDeserializer<List>() { @Override public List deserialize(JsonElement json,Type typeOfT,JsonDeserializationContext context) throws JsonParseException { final JsonObject jsonObject = json.getAsJsonObject(); for (Map.Entry<String,JsonElement> entry : jsonObject.entrySet()) { final JsonElement element = entry.getValue(); if (element.isJsonArray()) { return new Gson().fromJson(element.getAsJsonArray(),new TypeToken<List>(){}.getType()); } } return null; } )
但我不认为这是对的,它不能满足更广泛的条件.
private static class ItemTypeAdapterFactory implements TypeAdapterFactory { @Override public <T> TypeAdapter<T> create(Gson gson,final TypeToken<T> typE) { final TypeAdapter<T> delegate = gson.getDelegateAdapter(this,typE); final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class); return new TypeAdapter<T>() { @Override public void write(JsonWriter out,T value) throws IOException { delegate.write(out,value); } @Override public T read(JsonReader in) throws IOException { JsonElement jsonElement = elementAdapter.read(in); if (jsonElement.isJsonObject()) { JsonObject jsonObject = jsonElement.getAsJsonObject(); if (jsonObject.entrySet().size() == 2) { jsonObject.remove("status"); jsonElement = jsonObject.entrySet().iterator().next().getValue(); } } return delegate.fromJsonTree(jsonElement); } }.nullSafe(); } }
这是在RestAdapter.builder上设置的:
.setConverter(new GsonConverter(new GsonBuilder() .registerTypeAdapterFactory(new ItemTypeAdapterFactory()) .create()))
以上是大佬教程为你收集整理的android – 带有Retrofit转换器的Gson反序列化器:只需要内部JSON用于所有响应全部内容,希望文章能够帮你解决android – 带有Retrofit转换器的Gson反序列化器:只需要内部JSON用于所有响应所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。