我有几类需要在 android 应用程序中解析的对象,多亏了 GSON,我已经很容易处理这些对象。然而,我刚刚遇到了一个需要更复杂的事情的场景,尽管我已经完成了大量的阅读和实验,但我一直无法解决。
这是我用来解析的类之一的精简示例:
public class MyClass
{
public String id;
public List<String> details;
public Locations locations;
public List<Timing> timing;
public Image image;
public class Locations {
public List<Location> destinations;
public List<Location> past;
}
public class Timing {
public String start;
public String end;
}
}
然后我有另一个包含这个类的类:
public class ResultObject
{
//These represent the possible return values for a result object.
public Location location;
public List<MyClass> myClass;
public List<OtherClass> otherClass;
}
这些是我的类的非常简单的版本,无论如何 ResultObject 的 JSON 版本来自服务器,并且很容易解析,如下所示:
Type mapType = new TypeToken<ResultObject>(){}.getType();
result = gson.fromJson(httpResult.stream, mapType);
这很好用,我整天都得到很好的解析对象。当我在任何类层次结构中的任何字段上收到意外类型时,就会出现问题,这会导致整个 JSON 解析失败,因此结果为空。例如,'locations.past' 最终可能会以字符串数组的形式返回,而不是像它们应该的那样完整的 JSON 对象,并且不仅该数组列表为空,整个 ResultObject 将因解析错误而被没收。我真的很想解决这个问题,我怀疑这在于使用自定义反序列化器,但没有例子甚至涉及这样的层次结构。
如果有人在解析这种大小的对象时对如何处理意外类型有很好的了解,我将不胜感激。