我想使用UserMsg
JSON
的对象
public class UserMsg {
private String Type;
private UserData userData;
//Getters & Setters }
UserData
是一个接口
有很多类实现UserData
..每次我发送Json对象时它的userData
都可以是这些类中的任何一个对象。
所以在接收方我使用了这段代码:
Gson gson = new Gson();
UserMsg usermsg = gson.fromJson(JsonObject,UserMsg.class);
并收到此错误:
无法为接口UserData调用no-args构造函数。寄存器 这种类型的Gson InstanceCreator可以解决这个问题。
我尝试为InstanceCreator
注册UserData
,但它不起作用,所以我需要正确的方法让它运行。
答案 0 :(得分:0)
您可能想要创建自定义适配器,在读/写方法中,您可以设置解析方法,以便处理实现UserData
接口的不同类。像这样:
public class UserMsgAdapter extends TypeAdapter {
@Override
public UserMsg read(final JsonReader in) throws IOException {
final UserMsg data = new UserMsg();
in.beginObject();
while (in.hasNext()) {
in.nextName();
if(in.nextString().equals(someType))
// create one instance of a particular implementation
}
}
in.endObject();
return data;
}
@Override
public void write(final JsonWriter out, final UserMsg msg) throws IOException {
out.beginObject();
// write according to the instance type
out.endObject();
}
}
并且不要忘记注册这个自定义适配器:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(UserMsg.class, new UserMsgAdapter());
final Gson gson = gsonBuilder.create();