Android Kotlin Gson缓慢的Json反序列化

我有一个大的JSON,我不得不反序列化,我只对if的某些部分感兴趣。 我正在使用的Pojos是这样的:

data class Response<T>( val header: JHeader, val result: T ) data class JHeader( val success: Int, val error: List<String> ) class Character{ @SerializedName("id_") val id: Int @SerializedName("levelA") val level: String @SerializedName("a3") val unit: String = "" constructor(id: Int, level: String) { this.id = id this.level= level } } 

改造适配器的相关部分:

 val retrofit = Retrofit.Builder() .addCallAdapterFactory(rxAdapter) .addConverterFactory(GsonConverterFactory.create()) .baseUrl(BASE_URL) .client(httpClient.build()) .build() 

而Impl:

 fun getCharacterById(characterID: Int):Observable<Response<List<Character>>> { return apiService.getCharacter(characterID) .subscribeOn(Schedulers.io()) } 

我正在对300ms的调试报告进行简单的调用。

我的问题是:

  • 什么时候应该考虑使用TypeAdapter(我选择性能优于样板,我不介意使用类型适配器编写一些额外的代码行)。 但是我不太明白适配器是什么类型的,我应该在什么情况下使用它们。

  • 我的Json结构比我的Character Pojo有更多的属性,我只是意识到使用transient / @Expose或者把它保留在Pojo之外可以得到相同的结果。 那三个有什么区别?

  • 当我使用Kotlin时,是否有任何库/扩展可以帮助我处理这种TypeAdapter反序列化的问题?

对我来说,实现一个自定义的TypeAdapter是一个巨大的性能提升。 对于需要大量反序列化的每个类,我使用类型适配器。 在你的例子中(Java):

 public class CharacterTypeAdapter extends TypeAdapter<Character> { @Override public void write(final JsonWriter out, final Character character) throws IOException { out.beginObject(); out.name("id").value(character.getId()); out.name("level").value(character.getLevel()); out.name("unit").value(character.getUnit()); out.endObject(); } @Override public Character read(final JsonReader in) throws IOException { Character character = new Character(); in.beginObject(); while(in.hasNext()){ switch(in.nextName()){ case "id": character.setId(in.nextInt()); break; case "level": character.setId(in.nextString()); break; case "unit": character.setId(in.nextString()); break; } } in.endObject(); return character; } } 

TypeAdapter必须在Gson配置中注册如下:

 GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Character.class, new CharacterTypeAdapter()); Gson gson = gsonBuilder.create(); 

gson实例必须注册Retrofit:

  new Retrofit .Builder() .addConverterFactory(GsonConverterFactory.create(gson)) .build() .createApi(Api.class); 

你快速反序列化。