我正在为类 ForeignCollection
编写反序列化程序,即 abstract
,并在 ORMLite Android Library 中提供给我.请参阅下面的代码。
public class ForeignCollectionDeserializer implements JsonDeserializer<ForeignCollectionDeserializer> {
@Override
public ForeignCollection deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
...
}
}
我也尝试过实现 JsonDeserializer<?>
和 JsonDeserialzer
(没有通用类型)
我正在使用 GsonBuilder.registerTypeAdapter
注册反序列化器。
GsonBuilder gb = new GsonBuilder();
gb.registerTypeAdapter(ForeignCollection.class, new ForeignCollectionDeserializer());
Gson gson = gb.create();
然而,registerTypeAdapter()
正在扔这个:
06-11 11:27:27.937: E/AndroidRuntime(15197): FATAL EXCEPTION: main
06-11 11:27:27.937: E/AndroidRuntime(15197): Process: com.myapp, PID: 15197
06-11 11:27:27.937: E/AndroidRuntime(15197): java.lang.IllegalArgumentException
06-11 11:27:27.937: E/AndroidRuntime(15197): at com.google.gson.internal.$Gson$Preconditions.checkArgument($Gson$Preconditions.java:42)
06-11 11:27:27.937: E/AndroidRuntime(15197): at com.google.gson.GsonBuilder.registerTypeAdapter(GsonBuilder.java:448)
我正在单步执行代码,我到达了有问题的部分,来自 GsonBuilder
下面。
public GsonBuilder registerTypeAdapter(Type type, Object typeAdapter) {
$Gson$Preconditions.checkArgument(typeAdapter instanceof JsonSerializer<?>
|| typeAdapter instanceof JsonDeserializer<?>
|| typeAdapter instanceof InstanceCreator<?>
|| typeAdapter instanceof TypeAdapter<?>);
if (typeAdapter instanceof InstanceCreator<?>) {
instanceCreators.put(type, (InstanceCreator) typeAdapter);
}
我评估了typeAdapter instanceof JsonDeserializer<?>
在debug模式下发现其实是false
实际上我已经评估了所有这些:
-
typeAdapter instanceof JsonDeserializer
-
typeAdapter instanceof JsonDeserializer<ForeignCollection>
-
typeAdapter instanceof JsonDeserializer<?>
都是假的。
当我声明 typeAdapter
时,这是怎么回事?作为Object
类型 ForeignCollectionsDeserializer
, 它实现了 JsonDeserializer
?
最佳答案
事实证明我有多个错误的导入。
我不小心导入了 Gson 的 JsonDeserializer
的另一个库实现,这导致代码编译,但 instanceof
条件失败。
对吧
关于java - 为什么 Gson Preconditions 在这种情况下会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24168154/