【发布时间】:2017-10-02 16:16:06
【问题描述】:
使用 gson 和改造并创建一个 JsonDeserializer。
在java中,类定义为:
public class Test implements JsonDeserializer<NavigationMenu[]> {...
在Kotlin中,定义为:
class NavigationMenuArrayDeserializer : JsonDeserializer<Array<NavigationMenu>> {...
java 类在 GSON 注册后按预期调用。 Kotlin 类永远不会被调用。
Retrofit jsonClient = new Retrofit
.Builder()
.baseUrl(baseUrl)
.client(okHttpClient)
.addConverterFactory(getGsonConverter())
.build();
...
private GsonConverterFactory getGsonConverter() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setLenient();
gsonBuilder.registerTypeAdapter(NavigationMenu[].class, new NavigationMenuArrayDeserializer());
Gson gson = gsonBuilder.create();
return GsonConverterFactory.create(gson);
}
知道为什么吗?
【问题讨论】:
-
你注册了吗,就像
JavaDoc显示的那样:static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/… -
你能告诉我们你使用这个反序列化器的代码吗?
-
我很犹豫,因为我工作的公司可能有这方面的问题。我会告诉你这个类永远不会被调用,所以没有任何代码运行。当我将 kotlin 切换到 java 时,它运行良好。这是 kotlin Array
-
@Psest328 您提供的代码在这两种情况下都可以正常工作。看看这个简单的 repo github.com/varren/KotlinAndJava(没有 android 部分)你有什么不同?
-
@Psest328 总比悬赏给没有用的答案好!