解决您的问题的一种方法是TypeAdapter
为您的类编写一个,但是如果您的示例中只有这样的情况,您可以使用最通用的类为您完成反序列化,让 Gson 为您完成相同的结果。
我的意思显示在下面的代码中。
package stackoverflow.questions.q19478087;
import com.google.gson.Gson;
public class Q19478087 {
public class Test {
public int id;
public Object blob;
@Override
public String toString() {
return "Test [id=" + id + ", blob=" + blob + "]";
}
}
public static void main(String[] str){
String json1 = "{\"id\": 1, \"blob\": \"example text\"}";
String json2 = "{\"id\": 2, \"blob\": {\"to\": 1234, \"from\": 4321, \"name\": \"My_Name\"}}";
Gson g = new Gson();
Test test1 = g.fromJson(json1, Test.class);
System.out.println("Test 1: "+ test1);
Test test2 = g.fromJson(json2, Test.class);
System.out.println("Test 2: "+ test2);
}
}
这是我的执行:
Test 1: Test [id=1, blob=example text]
Test 2: Test [id=2, blob={to=1234.0, from=4321.0, name=My_Name}]
在第二种情况下,blob 将被反序列化为 LinkedTreeMap,因此您可以使用((Map) test2.blob).get("to")
例如访问其元素;
让我知道这是否足够,或者您是否也对类型适配器解决方案感兴趣。