【发布时间】:2014-06-11 16:37:55
【问题描述】:
我正在为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<?>,发现其实是false
实际上我已经评估了所有这些:
typeAdapter instanceof JsonDeserializertypeAdapter instanceof JsonDeserializer<ForeignCollection>typeAdapter instanceof JsonDeserializer<?>
都是假的。
当我将typeAdapter 声明为ForeignCollectionsDeserializer 类型的Object,它实现了JsonDeserializer,这是怎么回事?
【问题讨论】:
标签: java android deserialization gson ormlite