JSON反序列化java中没有类型信息的List

时间:2012-06-26 11:23:20

标签: java json serialization gson

class Result {
  private List orders;// Holds objects of class Object only.
  private Number a;
  private Number b;
}

class Order {
  private Number oid;
  private Number status;
}

public class TestClass {
public static void main(String... args){
    String testString = "{\"orders\":[{\"oid\":\"347\",\"status\":\"1\"},{\"oid\":\"348\",\"status\":\"1\"}],\"a\":14.15,\"b\":0}";
    Gson gson = new GsonBuilder().create(); 
    Result res = gson.fromJson( testString, Result.class );
}

无法修改类结果。 Json没有列表的类型信息,Json无法解析。

  1. 假设我们无法改变这些类,将如何解决这个问题?考虑可能存在多个不同类型的此类列表的情况。
  2. 如果列表包含多种类型的对象,该怎么办?

1 个答案:

答案 0 :(得分:1)

解析JSon时,您希望它具有某种结构。例如,您希望Result对象包含Orders而不包含字符串或其他内容。因此,解析器必须足够智能,以确定列表中可以包含哪些对象。除非您对集合进行参数化,否则无法知道这一点。据信,所有java泛型信息都在编译时被擦除。这不是真的。例如,Gson使用泛型来弄清楚如何解析特定的列表值。因此,如果您使用GSon解析器和List<Order>,则不同的列表类型没有问题。

处理不同的列表项类是另一回事。如果您可以更改Json数据,则可以为每个列表项编码类名及其字段。如果绝对无法更改数据类,则必须恢复将json解释为分层键值对的集合,并自行进行反序列化。

可能this线程将有所帮助