像这样定义模型:
public class ApiResult { private String error; private String message; private String resultCode; private MyResultObject resultObj;}然后,为 MyResultObject* 创建一个 TypeAdapterFactory : *
public class MyResultObjectAdapterFactory implements TypeAdapterFactory { @Override @SuppressWarnings("unchecked") public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { if (type.getRawType()!= MyResultObject.class) return null; TypeAdapter<MyResultObject> defaultAdapter = (TypeAdapter<MyResultObject>) gson.getDelegateAdapter(this, type); return (TypeAdapter<T>) new MyResultObjectAdapter(defaultAdapter); } public class MyResultObjectAdapter extends TypeAdapter<MyResultObject> { protected TypeAdapter<MyResultObject> defaultAdapter; public MyResultObjectAdapter(TypeAdapter<MyResultObject> defaultAdapter) { this.defaultAdapter = defaultAdapter; } @Override public void write(JsonWriter out, MyResultObject value) throws IOException { defaultAdapter.write(out, value); } @Override public MyResultObject read(JsonReader in) throws IOException { if (in.peek() == JsonToken.STRING) { in.skipValue(); return null; } return defaultAdapter.read(in); } }}最后,为 Gson* 注册 MyResultObjectAdapterFactory : *
Gson gson = new GsonBuilder() .registerTypeAdapterFactory(new MyResultObjectAdapterFactory()) .create();
现在,当使用该 Gson 对象反序列化 ApiResult* json时,如果 resultObj 是 string ,则将其设置为
null 。 * __
我希望这可以解决您的问题=)



