如何使用具有公共基础 class 的 GSON 反序列化 JSON
How to deserialize JSON using GSON with common base class
我有一个 json 看起来像这样
{
user:{
name:abc
email:a@bc.com
.....
}
responseCode:1
responseMessage:Done
}
我正在使用带有 GSON 转换器的 Retrofit 2。 2个参数
responseCode 和 responseMessage 出现在每个 JSON 中。区分参数是 "user"
所以我创建了一个 class
class BaseResponse {
public int responseCode;
public String responseMessage;
}
然后 POJOS 的其余部分扩展如下:
class User extends BaseResponse {
public String name;
public String email;
}
问题是,GSON 不会反序列化 "user" 部分。
我想我必须写一个 deserializer .
return new JsonDeserializer<T>() {
@Override
public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
int messageCode = jsonObject.get("responseCode").getAsInt();
if (messageCode == 1) {
**// What do I do now?**
}
return null;
}
};
问题是,GSON returns 我的用户 object 和用户 object 元素都是空的。
我有点陷入困境。无论如何这是可能的吗?我要么通过 JsonObject jo = json.getAsJsonObject().getAsJsonObject("user");
或 parent 得到 child class 的东西。
任何帮助将不胜感激。
你只需要做这3个类然后你就不需要写反序列化器了。
public abstract class BaseResponse {
public int responseCode;
public String responseMessage;
}
public class UserResponse extend BaseResponse {
private User user;
}
public class User {
private String name;
private String email;
}
那你就说Call<UserResponse> listRepos(@Path("user") String user);
我有一个 json 看起来像这样
{
user:{
name:abc
email:a@bc.com
.....
}
responseCode:1
responseMessage:Done
}
我正在使用带有 GSON 转换器的 Retrofit 2。 2个参数 responseCode 和 responseMessage 出现在每个 JSON 中。区分参数是 "user"
所以我创建了一个 class
class BaseResponse {
public int responseCode;
public String responseMessage;
}
然后 POJOS 的其余部分扩展如下:
class User extends BaseResponse {
public String name;
public String email;
}
问题是,GSON 不会反序列化 "user" 部分。 我想我必须写一个 deserializer .
return new JsonDeserializer<T>() {
@Override
public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
int messageCode = jsonObject.get("responseCode").getAsInt();
if (messageCode == 1) {
**// What do I do now?**
}
return null;
}
};
问题是,GSON returns 我的用户 object 和用户 object 元素都是空的。
我有点陷入困境。无论如何这是可能的吗?我要么通过 JsonObject jo = json.getAsJsonObject().getAsJsonObject("user");
或 parent 得到 child class 的东西。
任何帮助将不胜感激。
你只需要做这3个类然后你就不需要写反序列化器了。
public abstract class BaseResponse {
public int responseCode;
public String responseMessage;
}
public class UserResponse extend BaseResponse {
private User user;
}
public class User {
private String name;
private String email;
}
那你就说Call<UserResponse> listRepos(@Path("user") String user);