问题在于JSON响应,它不在
correct JSON format中.“content”字段应该是一个对象,而不是一个字符串:
{
"id": 2,"content": {
"type": "status","text": "Lorem ipsum dummy text.","id": 1
}
}
这将允许gson.fromJson(response,TestModel.class)或带有GsonConverterFactory的RetroFit将您的响应正确解析为相应的对象.
当然,这仅适用于您能够更改正在接收的JSON响应的情况.如果没有,首先要确保控制响应的人知道他们做错了.如果没有任何变化,那么您应该能够通过将TestModel中的内容更改为String来解决此问题:
class TestModel {
public int id;
public String name;
public String content;
}
class Content {
public int id;
public String type;
public String text;
}
然后分别解析每个对象:
TestModel testModel = gson.fromJson(response,TestModel.class);
Content content = gson.fromJson(testModel.content,Content.class);
如果无法更改响应,则另一个选项是为Content对象创建TypeAdapter:
public class ContentAdapter extends TypeAdapter {
@Override
public void write(JsonWriter out,Content value) throws IOException {
// TODO: Writer implementation
}
@Override
public Content read(JsonReader in) throws IOException {
if(in.peek() != JsonToken.NULL) {
return fromJson(in.nextString());
} else {
in.nextNull();
return null;
}
}
}
然后将TypeAdapter添加到您的GSON实现:
Gson gson = new GsonBuilder()
.registerTypeAdapter(Content.class,new ContentAdapter()).create();