我正在尝试JSONArray
使用Gson 反序列化a ,值的类型可以变化,值“ in_wanted”可以是a boolean
或a
JSONObject
。
in_wanted为boolean
:
{
"movies": [
{
"title": "example boolean",
"in_wanted": false
}
]
}
in_wanted为JSONObject
:
{
"movies": [
{
"title": "example object",
"in_wanted": {
"profile": {
"value": false
}
}
}
]
}
每当“ in_wanted”的值为布尔值时,我都需要该对象,并且需要一个反序列化器以返回null。用Gson做到这一点的最佳方法是什么?
您可以使用自定义解串器来完成此操作。首先,我们应该创建可以表示您的JSON的数据模型。
class JsonEntity {
private List<Movie> movies;
public List<Movie> getMovies() {
return movies;
}
public void setMovies(List<Movie> movies) {
this.movies = movies;
}
@Override
public String toString() {
return "JsonEntity [movies=" + movies + "]";
}
}
class Movie {
private String title;
private Profile in_wanted;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Profile getIn_wanted() {
return in_wanted;
}
public void setIn_wanted(Profile in_wanted) {
this.in_wanted = in_wanted;
}
@Override
public String toString() {
return "Movie [title=" + title + ", in_wanted=" + in_wanted + "]";
}
}
class Profile {
private boolean value;
public boolean isValue() {
return value;
}
public void setValue(boolean value) {
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
}
现在,当我们拥有所有需要的类时,我们应该实现新的自定义反序列化器:
class ProfileJsonDeserializer implements JsonDeserializer<Profile> {
@Override
public Profile deserialize(JsonElement jsonElement, Type type,
JsonDeserializationContext context) throws JsonParseException {
if (jsonElement.isJsonPrimitive()) {
return null;
}
return context.deserialize(jsonElement, JsonProfile.class);
}
}
class JsonProfile extends Profile {
}
请JsonProfile
上课看看。我们必须创建它以避免“反序列化循环”(棘手的部分)。
现在我们可以使用测试方法来测试我们的解决方案了:
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(Profile.class, new ProfileJsonDeserializer());
Gson gson = builder.create();
JsonEntity jsonEntity = gson.fromJson(new FileReader("/tmp/json.txt"),
JsonEntity.class);
System.out.println(jsonEntity);
我有一门课是这样的: 但是当我试图序列化它时,我收到一个错误,上面写着“试图序列化java.lang.class:java.lang.字符串。忘记注册一个类型适配器了吗?”。所以我创建了这个适配器: } 并登记如下: 但我还是犯了同样的错误<我做错了什么 适配器的实现看起来正常吗?
我在Android应用程序中实现Json反序列化时遇到了一些问题(带有Gson库)
这是保存过程开始的地方。我定义了一个抽象方法,以后在运行时已知的类中实现。 这里我知道的类型,我想调用一个方法。 所以问题是ConfigurationPersistenceHelper中的方法。运行此方法时,配置中得到的不是而是。 我知道我可以在每个具体应用程序类的方法中实现反序列化器逻辑。但这会导致大量重复代码。这是我目前的解决方案。 此外,我知道我可以将类型从(其中类型在运行时仍然可用)传递给
问题内容: 我在Android应用程序(带有Gson库)中实现Json反序列化存在一些问题 我已经上了这样的课 反序列化的调用是: 问题是调用后的result.posts列表包含一个LinkedTreeMap对象数组(具有正确的值,因此问题是反序列化)而不是MyJson对象。当我使用MyObject而不是T时,一切运行正常并且MyObject是正确的。 那么,有什么方法可以在不创建自定义反序列化器
问题内容: 我正在使用GSON 1.4,并使用两个通用对象序列化对象,如下所示 。当我对它进行反序列化时 可悲的是我得到了 java.lang.IllegalArgumentException:无法将java.util.ArrayList字段…设置为java.util.LinkedList 这是为什么 ?GSON文档指出,如果我使用object.class参数进行序列化,则它支持泛型。任何想法?谢
我从超文本传输协议Web服务收到以下JSON响应 现在我希望能够反序列化这个。我偶然发现了来自谷歌的Gson,它最初在一些小测试用例中运行良好,但我在反序列化上面的字符串时遇到了一些困难。 我正在阅读Gson用户指南,理想情况下,我希望有一个对象,它有两个属性:和,但是字段必须是对象的,这可能会让Gson感到困难。 然后我看了这个例子,它更接近我的问题,但我仍然不太明白。在这个例子中,整个响应是一