如何将JSON数组转换为FencersList对象?Gson反序列化问题
解决JSON数组反序列化为FencersList对象的问题
方案1:先转成ArrayList再逐个添加
直接将JSON数组反序列化为ArrayList<Fencers>,再通过addfencer方法逐个导入到FencersList对象中。示例代码(以Gson为例):
// 读取JSON文件内容到字符串jsonStr Gson gson = new Gson(); Type listType = new TypeToken<ArrayList<Fencers>>(){}.getType(); ArrayList<Fencers> tempList = gson.fromJson(jsonStr, listType); // 初始化目标FencersList并添加元素 FencersList targetList = new FencersList(); for(Fencers fencer : tempList) { targetList.addfencer(fencer); }
方案2:扩展FencersList的方法
给FencersList新增批量添加元素的方法,比如addFencers(List<Fencers> fencers),这样反序列化后可以一次性完成导入:
// 在FencersList类中新增方法 public void addFencers(List<Fencers> fencers) { for(Fencers fencer : fencers) { this.addfencer(fencer); } } // 调用示例 ArrayList<Fencers> tempList = gson.fromJson(jsonStr, listType); targetList.addFencers(tempList);
如果允许修改类结构,也可以让FencersList实现List<Fencers>接口,这样序列化和反序列化时能直接兼容数组格式。
方案3:自定义反序列化器
针对FencersList编写自定义反序列化逻辑,让JSON库直接将数组转换为FencersList对象,内部自动调用addfencer。示例代码(Gson):
public class FencersListDeserializer implements JsonDeserializer<FencersList> { @Override public FencersList deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonArray jsonArray = json.getAsJsonArray(); FencersList result = new FencersList(); for(JsonElement elem : jsonArray) { Fencers fencer = context.deserialize(elem, Fencers.class); result.addfencer(fencer); } return result; } } // 注册并使用 Gson gson = new GsonBuilder() .registerTypeAdapter(FencersList.class, new FencersListDeserializer()) .create(); FencersList targetList = gson.fromJson(jsonStr, FencersList.class);
内容的提问来源于stack exchange,提问作者Moustafa Amr
相关产品推荐
相关产品推荐

