【发布时间】:2017-05-23 12:29:02
【问题描述】:
我正在尝试找出一种方法来选择性地反序列化来自 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 和标题进行建模。
我发现我可以使用 @expose 注释为我感兴趣的字段创建我的 java 模块,而不是使用 builder.excludeFieldsWithoutExposeAnnotation(); 通过这种方式,我将控制哪些字段从照片中反序列化(仍然不确定它是否可以这样工作),但是照片呢?
我的问题是:
有没有办法忽略该列表?我是否必须对包含两个列表(及其各自字段)的 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 来完成手头的任务感到好奇。
提前致谢!
【问题讨论】: