【发布时间】:2017-08-03 23:46:24
【问题描述】:
我有一个如下所示的 json 对象:
{
"user": {
"id": 1234
...
"photos": [
{
"url": "http://....."
...
},
{
"url": "http://....."
...
}
]
}
}
我想为user 和photos 编写一个自定义反序列化器。
所以我有:
public class User {
private long id;
private ArrayList<Photo> photos;
...
public static class Deserializer implements JsonDeserializer<User> {
... // does the custom serialization of the User object
}
}
public class Photo {
private String url;
...
public static class Deserializer implements JsonDeserializer<Photos> {
... // does the custom serialization of the Photo object
}
}
在初始化时我这样做:
new GsonBuilder()
.registerTypeAdapter(User.class, new User.Deserializer());
.registerTypeAdapter(Photos.class, new Photos.Deserializer());
但是,当我反序列化 User 类时,它会命中 User 的反序列化器,但从未命中 Photo 的反序列化器。但是,如果我得到一个 json,其中的照片对象没有嵌套在用户 json 对象中,如下所示:
{
"photos": [
{
"url": "http://....."
...
},
{
"url": "http://....."
...
},
{
"url": "http://....."
...
}
]
它会正确命中Photo的反序列化器
【问题讨论】:
-
您能告诉我为什么需要自定义反序列化器来处理这种情况吗?
-
我上面给出的例子是一个非常简单的例子。我在应用中使用的对象要复杂得多。
-
您好,我在 GitHub 上看到了您的问题:github.com/google/gson/issues/1034 -- 既然您知道 Gson 类型适配器现在是如何工作的,能否请您关闭它?谢谢。
标签: java json serialization gson android