Java Gson自定义反序列化

Java Gson自定义反序列化,java,json,gson,Java,Json,Gson,我使用Gson创建和解析JSON,但我遇到了一个问题。在我的代码中,我使用此字段: @Expose private ArrayList<Person> persons = new ArrayList<Person>(); 数据是一组人 有没有办法使用Gson将这个JSON转换成我的类?我可以使用JsonDeserializer吗?您需要一个自定义反序列化程序(),类似于: public static class MyJsonAdapter implements Js

我使用Gson创建和解析JSON,但我遇到了一个问题。在我的代码中,我使用此字段:

@Expose
private ArrayList<Person> persons = new ArrayList<Person>();
数据是一组人


有没有办法使用Gson将这个JSON转换成我的类?我可以使用JsonDeserializer吗?

您需要一个自定义反序列化程序(),类似于:

  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;
  }
公共静态类MyJsonAdapter实现JsonDeserializer
{
List people=new ArrayList();
公共列表反序列化(JsonElement JsonElement,类型类型,JSONESerializationContext)
抛出JsonParseException
{
for(json数据数组中的每个元素)
{
Person p=context.deserialize(jsonElementFromArray,Person.class);
新增(p);
}
}
还人,;
}

您可以尝试下面的代码来解析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());
String jsonInputStr=“{count:“n”,数据:[……]}”;
Gson Gson=新的Gson();
JsonObject jsonObj=gson.fromJson(jsonInputStr,JsonElement.class).getAsJsonObject();
List persons=gson.fromJson(jsonObj.get(“data”).toString(),new-TypeToken(){}.getType());

我已尝试了您的解决方案,但仍然出现“IllegalStateException:应为BEGIN\u数组,但为BEGIN\u对象”。这是我的实现:它基本上是伪代码,而不是可以插入的东西。您必须获得与数据对应的正确元素,然后解析该元素。请看这里的反序列化方法(从1089开始),这是我以前写过的一个复杂的反序列化程序:谢谢您的回复!我只是无法处理序列化程序,但现在,似乎我终于明白了,实际上我是这样做的
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());