我使用Gson创建和解析JSON,但是我遇到了一个问题。在我的代码使用这个字段:Gson自定义反序列化
@Expose
private ArrayList<Person> persons = new ArrayList<Person>();
但我的JSON是格式化这样的:
persons:{count:"n", data:[...]}
数据是人的数组。
有什么办法可以将这个JSON转换成我的班级使用Gson?我可以使用JsonDeserializer吗?
我使用Gson创建和解析JSON,但是我遇到了一个问题。在我的代码使用这个字段:Gson自定义反序列化
@Expose
private ArrayList<Person> persons = new ArrayList<Person>();
但我的JSON是格式化这样的:
persons:{count:"n", data:[...]}
数据是人的数组。
有什么办法可以将这个JSON转换成我的班级使用Gson?我可以使用JsonDeserializer吗?
你需要一个自定义解串器(http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/JsonDeserializer.html),是这样的:
public static class MyJsonAdapter implements JsonDeserializer<List<Person>>
{
List<Person> people = new ArrayList<>();
public List<Person> deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context)
throws JsonParseException
{
for (each element in the json data array)
{
Person p = context.deserialize(jsonElementFromArray,Person.class);
people.add(p);
}
}
return people;
}
你可以试试下面的代码解析您的JSON
String jsonInputStr = "{count:"n", data:[...]}";
Gson gson = new Gson();
JsonObject jsonObj = gson.fromJson(jsonInputStr, JsonElement.class).getAsJsonObject();
List<Person> persons = gson.fromJson(jsonObj.get("data").toString(), new TypeToken<List<Person>>(){}.getType());
其实我是这样做的 –
我已经试过您的解决方案,但有仍然发生“IllegalStateException:预期BEGIN_ARRAY但是BEGIN_OBJECT”。这里是我的实现:http://pastebin.com/4ZYs0S9A –
它基本上是伪代码,不是你可以放入的东西。你必须得到与数据相对应的正确元素,然后解析它。看到这里的反序列化方法(从1089开始),这是一个我曾经写过的复杂的反序列化器:https://github.com/chriskessel/MyHex/blob/master/src/kessel/hex/domain/Player.java –
感谢您的回复!我只是无法处理序列化程序,但现在,似乎,我终于明白了 –