java中无类型信息的JSON反序列化列表
无法修改类结果。Json没有列表的类型信息,Json无法解析java中无类型信息的JSON反序列化列表,java,json,serialization,gson,Java,Json,Serialization,Gson,无法修改类结果。Json没有列表的类型信息,Json无法解析 假设我们不能改变这些类别,我们将如何解决这个问题?考虑有多个不同类型的列表时的情况。 如果列表包含多种类型的对象,该怎么办 解析JSon时,您希望它具有特定的结构。例如,您希望结果对象包含顺序,而不是字符串或其他内容。因此,解析器必须足够智能,以确定列表中可以包含哪些类型的对象。除非将集合参数化,否则无法知道这一点。人们相信所有java泛型信息都会在编译时被删除。事实并非如此。例如,Gson使用泛型来确定如何解析特定的列表值。因此,如
解析JSon时,您希望它具有特定的结构。例如,您希望结果对象包含顺序,而不是字符串或其他内容。因此,解析器必须足够智能,以确定列表中可以包含哪些类型的对象。除非将集合参数化,否则无法知道这一点。人们相信所有java泛型信息都会在编译时被删除。事实并非如此。例如,Gson使用泛型来确定如何解析特定的列表值。因此,如果您使用的是GSon解析器和
List
,那么不同的列表类型没有问题
处理不同的列表项类是另一回事。如果可以更改Json数据,则可以为每个列表项编码类名及其字段。如果您绝对不能更改数据类,那么您必须将json解释为分层键值对的集合,并自己进行反序列化
也许这条线会有帮助
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 );
}