您需要为该
Apple类型注册一个自定义类型适配器。在类型适配器中,您将添加逻辑以确定是否为您提供了数组或单个对象。使用该信息,您可以创建
Apple对象。
除以下代码外,请修改您的Apple模型对象,以使该
seeds字段不会自动解析。将变量声明更改为:
private List<Seed> seeds_funkyName;
这是代码:
GsonBuilder b = new GsonBuilder();b.registerTypeAdapter(Apple.class, new JsonDeserializer<Apple>() { @Override public Apple deserialize(JsonElement arg0, Type arg1, JsonDeserializationContext arg2) throws JsonParseException { JsonObject appleObj = arg0.getAsJsonObject(); Gson g = new Gson(); // Construct an apple (this shouldn't try to parse the seeds stuff Apple a = g.fromJson(arg0, Apple.class); List<Seed> seeds = null; // Check to see if we were given a list or a single seed if (appleObj.get("seeds").isJsonArray()) { // if it's a list, just parse that from the JSON seeds = g.fromJson(appleObj.get("seeds"), new TypeToken<List<Seed>>() { }.getType()); } else { // otherwise, parse the single seed, // and add it to the list Seed single = g.fromJson(appleObj.get("seeds"), Seed.class); seeds = new ArrayList<Seed>(); seeds.add(single); } // set the correct seed list a.setSeeds(seeds); return a; }});
有关更多信息,请参阅Gson指南。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)