我试图找出一种从flickr中有选择地反序列化特定字段的方法。
{"photos":{"page":1,"pages":10,"perpage":100,"total":1000,"photo":[{"id":"","owner":"","secret":"","server":"","farm":,"title":"","ispublic":,"isfriend":,"isfamily":0,"url_s":"","height_s":"","width_s":""},...]}
我收到一个包含两个列表(照片和照片)的对象,我想在Java中仅使用照片中的id,url_s和title来建模。
我发现我可以使用@expose注释为我感兴趣的字段创建我的java模块而不是使用 builder.excludeFieldsWithoutExposeAnnotation(); 通过这种方式,我可以控制哪些字段从照片中反序列化(仍然不确定它的gonne是如何工作的),但照片呢?
我的问题是:
有没有办法忽略该列表?我是否必须为包含两个列表(及其各自的字段)的Java类建模,以便从第二个列表中获取我需要的内容?
扩展前一个问题,如果我的照片模块类是:
public class GalleryItem {
@Expose()
private String mCaption;
@Expose()
private String mId;
@Expose()
private String mUrl;
}
我只能在我需要的部分调用gson吗?
Type galleryListType = new TypeToken<ArrayList<GalleryItems>> (){}.getType();
List<GalleryItems> itemsList = gson.fromJson(jsonString, galleryListType);
我可以以某种方式使用setExclusionStrategies跳过照片列表吗?
gsonBuilder.setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
**return f.getName().contains("photos")**;
}
@Override
public boolean shouldSkipClass(Class<?> incomingClass) {
return ;
}
});
我已经使用原始JSONObject / JSONArray实现了解决方案,但我对使用GSON执行手头的任务感到好奇。
提前致谢!
答案 0 :(得分:0)
Gson提供Java字段的反序列化。如果您将变量标记为transient
,Gson将不会序列化为JSON。 Gson还通过注释提供更精细的反序列化控制:@Expose(deserialize = false/true)
最后一个选项是编写自定义JsonDeserializer<T>